gpt4 book ai didi

python - 获取只有 1 个字母差异的单词列表的更简单方法? (Python)

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:41 24 4
gpt4 key购买 nike

words = []

for w in wordList:
wcnt = 0
for i in range(len(word)):
if w[i] != word[i]:
wcnt += 1
if wcnt == 1:
words.append(w)

给定一个单词和一个字符串列表,我想检索只有一个字符与给定的单词不同的字符串列表。

我试过上面的代码,它工作正常,但花费的时间太长。

我正在练习面试,我不想使用任何库。

我怎样才能让它更简单?

例子)word = "丢失"

wordList= ["most","mist","miss","lost","fist","fish"]

输出应该是['most']

编辑:仅更改 1 个字符有效。不删除或添加。

最佳答案

复杂性将保持不变,但也许您可以在列表理解中使用 sum 来加快速度:

words = [w for w in wordList if sum(a!=b for a,b in zip(word,w)) == 1]
  • zip 通过直接交错字母并生成它们进行一对一比较来避免使用索引
  • sum 避免在 python 中原生计数(表达式交错两个单词的字母,如果不同则加 1,否则加 0,比较结果为 TrueFalse 分别为 1 和 0)
  • 列表理解是高度优化的 python 结构
  • 上面的代码没有使用任何外部库,只使用了内置库
  • 它不会因 IndexError 而崩溃,即使单词的长度不同(即使结果将不可靠),因为 zip 在较短的序列结束时停止.
  • one-liner 很酷(当不太牵强/有副作用时)

所以你使用的内置函数越多,它通常就会越快。如果不同字母的数量达到 2,这里可能会稍微改进以停止计数,但这将意味着停止使用理解。

关于python - 获取只有 1 个字母差异的单词列表的更简单方法? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52393441/

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