我有两个大文本文件:
“>;600000行的字母”
“数字”大于100 000行
字母如下所示:
AAAA
AAAB
AAAC
etc…
数字有两列,一列是“id”,另一列是数字列表:
id1 5, 201, 66, 33 id2 356 id3 5103, 2, 452 etc…
我希望“字母”中的每一行代表一个数字:
1 AAAA 2AAAB etc…
然后检查“数字”中的哪一行包含该数字,然后将该id与字母组合配对,仅在本例中:
AAAB id3
运行此脚本需要几天时间:
combine = {}
for i, x in enumerate(letters):
for id, number in numbers.items():
if i+1 in number:
combine[x['letter']] = id
有没有更快的方法?你知道吗
如果使用线性时间算法而不是二次时间算法,则1e5和6e5不是大数:
如果多个id可能对应于同一个字母(如果
numbers
文件中有重复的数字),那么最新的数字获胜。你知道吗示例
数字:
信件:
输出
注意:数字
2
对应于AAAC
(零基索引),如果字母应该从1
索引,则使用letters[n-1]
(假设n>=1
)。你知道吗将所有字母存储在一个列表中
letters = ["AAAA", "AAAB", "AAAC", ...]
。你知道吗现在在读入数字文件后,创建一个映射,如
在执行上述步骤的同时,创建一个零数组,读入numbers文件并指定它所属的映射行
现在查找
letters
列表中的第i个字母及其编号只需对每个文件进行一次传递,O(N):
将字母文件读入数组。您将获得数组索引(+1?)=行号。
读取数字文件。对于每行:使用数字将
id
与数组中的字母组合。相关问题 更多 >
编程相关推荐