You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Levenshtein比值移除Python列表中的相似字符串?

解决Python列表中移除相似单词的问题

首先纠正你原代码的两个明显问题:

  1. 遍历原列表时直接删除元素,会导致迭代器跳过后续元素——因为列表长度动态变化,迭代索引不会自动调整。
  2. 代码里的word list是拼写错误,应为word_list,且未排除单词与自身的比较(此时Levenshtein比值为1.0,会错误删除目标单词本身)。

下面提供两种正确的实现方案:

方案一:针对特定目标单词移除相似项

如果需求是固定移除和'asf'相似的单词(保留'asf'本身),可直接生成过滤后的新列表:

from Levenshtein import ratio

word_list = ['asf', 'bcd', 'ase', 'cdf', 'asl']
target_word = 'asf'
# 保留目标单词,以及和目标比值小于0.9的单词
filtered_words = [word for word in word_list if word == target_word or ratio(word, target_word) < 0.9]
print(filtered_words)  # 输出: ['asf', 'bcd', 'cdf']

方案二:两两比较移除所有相似项

如果需要遍历所有单词,两两比较后移除任意一组相似项中的重复项(保留先出现的单词),可使用以下逻辑:

from Levenshtein import ratio

word_list = ['asf', 'bcd', 'ase', 'cdf', 'asl']
keep_words = []

for current_word in word_list:
    # 检查当前单词和已保留的所有单词是否都不相似
    if all(ratio(current_word, kept_word) < 0.9 for kept_word in keep_words):
        keep_words.append(current_word)

print(keep_words)  # 输出: ['asf', 'bcd', 'cdf']

核心逻辑说明

  • 避免直接修改原列表,通过生成新列表或收集保留项的方式,彻底规避遍历过程中列表长度变化导致的元素跳过问题。
  • 方案二中的all()函数确保当前单词和所有已保留单词都不相似时才加入列表,不会出现重复的相似项。

内容的提问来源于stack exchange,提问作者schieslu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:25:42