我对编码非常陌生,所以我确信这是一个非常简单的问题,但下面是我的代码:
d = {'1': 'my', '3': 'is', '2': 'name', '5': 'johnny', '4': 'appleseed'}
phrase = ('my', 'nme', 'es', 'johnny', 'appleseed')
for i in range(1,len(phrase)):
if phrase not in d.values():
print("Typo")
else:
print("No typo")我要做的是一个一个地检查每个字符串,看看它是否存在于字典"d“中。如果它是存在的,我想打印“没有台风”,如果不是,我想打印“台风”。谢谢!
发布于 2022-05-11 13:13:42
一个建议,避免重复使用x in d.values(),因为平均复杂度是O(n)。
初始化一个集以进行O(1)搜索:
d = {'1': 'my', '3': 'is', '2': 'name', '5': 'johnny', '4': 'appleseed'}
phrase = ('my', 'nme', 'es', 'johnny', 'appleseed')
S = set(d.values())
for w in phrase:
if w not in S:
print(f"{w}: Typo")
else:
print(f"{w}: No typo")示例(重复值):
d = {'1': 'my', '3': 'is', '2': 'name', '5': 'johnny', '4': 'appleseed'}
d = dict(enumerate(list(d.values())*100000))
phrase = ('my', 'nme', 'es', 'johnny', 'appleseed')*1000
%%timeit
S = set(d.values())
for w in phrase:
w not in S
3.35 ms ± 51.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%%timeit
for w in phrase:
w not in d.values()
13.3 s ± 76.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)示例2(唯一值):
d = {'1': 'my', '3': 'is', '2': 'name', '5': 'johnny', '4': 'appleseed'}
d = dict(enumerate(range(1000000)))
phrase = (0,1,2,3,-1,-2)*1000
%%timeit
S = set(d.values())
for w in phrase:
w not in S
30.1 ms ± 1.42 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit
for w in phrase:
w not in d.values()
# sill running after 1min发布于 2022-05-11 13:06:00
d = {'1': 'my', '3': 'is', '2': 'name', '5': 'johnny', '4': 'appleseed'}
phrase = ('my', 'nme', 'es', 'johnny', 'appleseed')
for i in phrase:
if i not in d.values():
print(f"{i} → Typo")
else:
print(f"{i} → No typo")输出
my → No typo
nme → Typo
es → Typo
johnny → No typo
appleseed → No typohttps://stackoverflow.com/questions/72201510
复制相似问题