python - 有没有更快的方法来循环这段代码?
问题描述
我有一长串生成的名称,以及一个包含可接受名称的 5000 字文件。我想在我的列表中找到也出现在文件中的名称。我该怎么做呢?
我尝试过使用循环,但这对于我需要的东西来说太长了,因为我的名称文件太长而无法在整个文件中搜索每个生成的名称。当 n 为 12 个数字时,我生成的列表中有 531441 个名称。
这是一些代码:
from time import process_time
from itertools import product
start = process_time()
n = "5747867437"
phone = {2: ["A", "B", "C"], 3: ["D", "E", "F"], 4: {"G", "H", "I"}, 5: ["J", "K", "L"], 6: ["M", "N", "O"], 7: ["P", "R", "S"], 8: ["T", "U", "V"], 9: ["W", "X", "Y"]}
li = set(open("dict.txt", "r").read().strip().split("\n"))
num = []
names = []
for x in n:
num.append(phone[int(x)])
for y in product(*num):
names.append(''.join(y))
available = []
ad = False
for z in names:
if z in li:
available.append(z)
acceptable.sort()
print(acceptable)
if acceptable:
for a in acceptable:
print(a + "\n")
else:
print("NONE\n")
print(process_time() - start)
文件“acceptable_names.txt”是其中包含可接受名称的文件。现在需要3秒。有没有办法让它更快?
提前致谢!
解决方案
如上所述,使用集合之间的交集。就像是:
set_names = set(names)
set_li = set(li)
acceptable = set_names.intersection(set_li)
# if you want to sort it, convert it into a list first
print(list(acceptable).sort()