现在我正在编写一些python代码,需要进行类似于以下内容的列表比较:
small_list = ["string"]*3
big_list = ["string"]*600000
big_list_excludes = ["string"]*600000
final_lines = []
for small in small_list:
final_lines = [line for line in big_list if small in big_list]
for exclude in big_list_excludes:
final_lines = [line for line in final_lines if exclude not in final_lines]
到目前为止,这些名单并不是很大。执行已经分裂。但是,big_list现在可以包含大约60,000个条目,并且'big_list_excludes'也可以包含。有没有人知道缩短上述方法的方法,以便它更快?另外 - 有没有人知道我可以使用的不同数据类型除了可以使执行更快的列表?我确实需要添加到这些列表中,但我不需要更改顺序。
另外,我希望这些列表比较不区分大小写。以前我通过做类似的事情来完成这个:
for small in small_list:
for line in big_list:
if small.upper() in line.upper():
final_lines.append(line)
我很确定这会大大降低速度。如果有人知道如何更有效地做到这一点,那也会有所帮助。
答案 0 :(得分:3)
集合绝对是一种快速完成此操作的简单方法。不是真正的性能测试,但这个小程序即时运行(在2.7GHz i7 iMac上),包含10,000套项目:
from sets import Set
inc = set(open('big_list.txt').read().splitlines())
excl = set(open('big_list_excludes.txt').read().splitlines())
sm = set(open('small_list.txt').read().splitlines())
sm.intersection_update(inc)
sm.difference_update(excl)
print sm
不是不区分大小写。