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

标签 python

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/

相关文章:

Python:heapq.heappop() 给出奇怪的结果

python - 迭代 Pandas 中的行组

Python/Arduino串口通信

python - Scrapy 爬取带有 PostBack 数据 javascript url 的页面不会改变

python - 读取 json 图 networkx 文件

php - 用于文件/图像操作的有效解释型编程语言

python - 使用 Python 对字典中的列表中的值进行分组以使用每个值的组号创建新字典?

python - Jupyter 导入错误 : cannot import name cbook

python - 如何在列表理解中将变量名称提取为字符串?

python - 使用 'paths'访问不同层次的嵌套字典