She*_*rSt 2 python string comparison tuples list
现在我正在编写一些 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]
Run Code Online (Sandbox Code Playgroud)
到目前为止,名单还不是很大。立即执行。然而,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)
Run Code Online (Sandbox Code Playgroud)
我相当确定这会大大降低速度。如果有人知道一种更有效的方法,那也会很有帮助。
集合绝对是快速完成此任务的简单方法。这不是真正的性能测试,但这个小程序可以即时运行(在 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
Run Code Online (Sandbox Code Playgroud)
但不区分大小写。