首页 > 解决方案 > 有没有更快的方法来循环这段代码?

问题描述

我有一长串生成的名称,以及一个包含可接受名称的 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秒。有没有办法让它更快?

提前致谢!

标签: python

解决方案


如上所述,使用集合之间的交集。就像是:

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

推荐阅读