gpt4 book ai didi

python - 如何有效地比较 Python 中的大型列表?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:26:46 28 4
gpt4 key购买 nike

我正在尝试找到 9 个字母的单词,当你平均分成 3 个部分并四处乱转时,你会得到另一个九个字母的单词。

for i in nineWordList:
for j in nineWordList:
if (i[3:5] + i[0:2] + i[6:8]) == j:
correctWords.append(i)
elif (i[3:5] + i[6:8] + i[0:2]) == j:
correctWords.append(i)
elif (i[0:2] + i[6:8] + i[3:5]) == j:
correctWords.append(i)
elif (i[6:8] + i[0:2] + i[3:5]) == j:
correctWords.append(i)
elif (i[6:8] + i[3:5] + i[0:2]) == j:
correctWords.append(i)

我就是这样做的。唯一的问题是 nineWordList 有 68,000 个元素,这需要很长时间。我该如何改进它,使其更有效率?

最佳答案

使用 set为了避免在列表中的两个级别上循环:

nineWordSet = set(nineWordList)
for i in nineWordSet:
if i[3:5] + i[0:2] + i[6:8] in nineWordSet:
correctWords.append(i)
elif i[3:5] + i[6:8] + i[0:2] in nineWordSet:
correctWords.append(i)
elif i[0:2] + i[6:8] + i[3:5] in nineWordSet:
correctWords.append(i)
elif i[6:8] + i[0:2] + i[3:5] in nineWordSet:
correctWords.append(i)
elif i[6:8] + i[3:5] + i[0:2] in nineWordSet:
correctWords.append(i)

这仍然需要遍历所有这 68,000 个条目(你显然无法避免)但是在第一遍中,它会将列表转换为一个集合,因此可以使用 in 进行成员资格测试在固定时间制作。这为您提供了线性时间复杂度,而不是嵌套循环所具有的二次时间复杂度。当然,额外的设置将需要更多内存,但这应该不是问题。


顺便说一句。我相信您的切片已关闭。 i[0:2] 不会产生一个 3 个字母的单词(当你想平均分割一个 9 个字母的单词时):

>>> x = 'abcdefghi'
>>> x[0:2], x[3:5], x[6:8]
('ab', 'de', 'gh')

切片中的第二个索引始终是非包含的,因此您需要将其增加一个:

>>> x[0:3], x[3:6], x[6:9]
('abc', 'def', 'ghi')

您还可以使用 itertools.permutations 稍微缩短您的条件生成那些可能的跳跃词。这样,您的支票可能会更美观:

import itertools
nineWordSet = set(nineWordList)

for word in nineWordSet:
for perm in itertools.permutations((word[0:3], word[3:6], word[6:9])):
# skip the original permutation
if perm == word:
continue

elif perm in nineWordSet:
correctWords.append(word)

# stop checking for more permutations
break

关于python - 如何有效地比较 Python 中的大型列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41889204/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com