求助:实现姓名相似度对比脚本的缺失Python代码模块
姓名相似度对比Python脚本补全方案
以下是你标记的「####################」步骤的具体实现,直接替换对应位置即可:
1. 识别重复字母
通过统计字母出现次数,筛选出重复的目标字母:
from collections import Counter # 统计所有字母的出现频次 letter_counts = Counter(list_of_both) # 提取出现次数>1的字母(若有多个重复字母可扩展逻辑) repeated_letter = [letter for letter, count in letter_counts.items() if count > 1][0]
2. 识别重复字母的索引
遍历列表,记录目标字母的所有出现位置:
# 获取重复字母的全部索引 repeated_indices = [idx for idx, letter in enumerate(list_of_both) if letter == repeated_letter] repeated_index1 = repeated_indices[0] # 第一个重复位置 repeated_index2 = repeated_indices[1] # 第二个重复位置
3. 删除重复字母(保留第一个)
复制原列表后,倒序删除后续重复索引(避免正序删除导致的索引移位问题):
list_without_repeated_letters = list_of_both.copy() # 从后往前删除除第一个外的重复项 for idx in reversed(repeated_indices[1:]): del list_without_repeated_letters[idx]
4. 生成分值列表
遍历去重后的列表,为重复字母赋值repeated_letter_value,其余字母赋值1:
points = [repeated_letter_value if letter == repeated_letter else 1 for letter in list_without_repeated_letters]
完整补全后的代码
from collections import Counter name_1 = ("Mike").lower() #"mike" name_2 = ("Chris").lower() #"chris" list_name_1 = [i for i in name_1] #["m", "i", "k", "e"] list_name_2 = [i for i in name_2] #["c", "h", "r", "i", "s"] list_of_both = list_name_1 + list_name_2 #["m", "i", "k", "e", "c", "h", "r", "i", "s"] #Python识别到字母"i"重复,将其存入该变量: letter_counts = Counter(list_of_both) repeated_letter = [letter for letter, count in letter_counts.items() if count > 1][0] #Python识别重复字母所在的索引: repeated_indices = [idx for idx, letter in enumerate(list_of_both) if letter == repeated_letter] repeated_index1 = repeated_indices[0] #第一个重复索引 repeated_index2 = repeated_indices[1] #第二个重复索引 #Python删除重复字母的所有索引,但保留第一个: list_without_repeated_letters = list_of_both.copy() for idx in reversed(repeated_indices[1:]): del list_without_repeated_letters[idx] #Python为每个缺失的字母给"deleted_summary"变量加1分: deleted_summary = len(list_of_both) - len(list_without_repeated_letters) #1 #Python将"repeated_letter_value"变量设为"deleted_summary + 1",因为有一个索引未被删除: repeated_letter_value = deleted_summary + 1 #2 #Python为"list_without_repeated_letters"中的每个字母赋值1分,但重复字母"i"使用repeated_letter_value作为分值: points = [repeated_letter_value if letter == repeated_letter else 1 for letter in list_without_repeated_letters]
内容的提问来源于stack exchange,提问作者empress
相关产品推荐
相关产品推荐

