Skip to main content
 首页 » 编程设计

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

2025年05月04日14kevingrace

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,这里可能会稍微改进以停止计数,但这将意味着停止使用理解。