如何编写更快的 Python 代码?

How to write faster Python code?

我的代码

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
[]

但问题是代码很慢,我会进行更多计算 later.How 来改进它吗? 我的 python

Python 2.7.6

首先,我不知道它是如何工作的:

[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)

这在内存方面效率不高,但在执行速度方面非常高效。
好像你不使用 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)