我的代码
with open('data1.txt','r') as f:
lst = [int(line) for line in f]
l1=lst[::3]
l2=lst[1::3]
l3=lst[2::3]
print len(l1)
print len(l2)
print len(l3)
b = []
for i in range(3200000):
b.append(i+1)
print len(b)
mapping = dict(zip(l1, b))
matches = [mapping[value] for value in l2 if value not in mapping]
print matches
我的目标是两个比较清单,预计它们具有相同的元素。 工作正常
3200000
3200000
3200000
3200000
[]
但问题是代码非常慢,我稍后会有更多的计算。如何改进呢? 我的python
Python 2.7.6
答案 0 :(得分:1)
这对于记忆而言效率不高,但对执行速度非常有效 好像你不使用l3。 diff将包含两个列表中未包含的所有内容。
import itertools
with open('data1.txt','r') as f:
lines = map(int, f)
l1 = itertools.islice(lines, 0, None, 3)
l2 = itertools.islice(lines, 1, None, 3)
diff = set(l1) ^ set(l2)
答案 1 :(得分:0)
首先,我不知道这是如何运作的:
[mapping[value] for value in l2 if value not in mapping]
我认为value
始终位于mapping
中且数组始终为空。它应该抛出一个错误,否则将无法找到密钥。
然后,尝试这样的事情,没有无用的内存分配:
mapping = {}
l2 = []
with open('data1.txt','r') as f:
for i,line in enumerate(f):
v = int(line)
if i % 3 == 0:
mapping[v] = i+1
elif i % 3 == 1:
l2.append(v)
matches = [mapping[value] for value in l2 if value not in mapping] # ??
print(matches)