如何编写更快的Python代码?

时间:2016-03-30 18:04:41

标签: python list python-2.x

我的代码

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

2 个答案:

答案 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)