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,比较结果为True
或False
分别为 1 和 0)- 列表理解是高度优化的 python 结构
- 上面的代码没有使用任何外部库,只使用了内置库
- 它不会因
IndexError
而崩溃,即使单词的长度不同(即使结果将不可靠),因为zip
在较短的序列结束时停止. - one-liner 很酷(当不太牵强/有副作用时)
所以你使用的内置函数越多,它通常就会越快。如果不同字母的数量达到 2,这里可能会稍微改进以停止计数,但这将意味着停止使用理解。
关于python - 获取只有 1 个字母差异的单词列表的更简单方法? (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52393441/