Python实现含连续重复字母国家元组生成与正确排序的问题修正
现有代码核心缺陷排查
- 多词国家名称丢失:原代码将国家名按空格拆分逐词匹配,仅将匹配到的单个单词存入结果列表,完全丢失多词国家的完整结构,比如「saint kitts and nevis」被拆成单独的「Kitts」,「sierra leone」被拆成单独的「Sierra」。
- 结果提取逻辑错误:匹配成功后仅返回匹配到的单词片段,而非对应的完整国家名称,导致输出结果均为破碎的单词,和预期的完整国家名不符。
- 大小写格式不统一:直接使用原始国家名的大小写格式,未做统一转换,和预期输出的全小写格式存在差异。
- 排序规则完全偏离:原代码直接对存入的单词片段按字典序排序,未按要求以「国家名内包含的连续重复字母」为排序依据,导致顺序和预期完全不符。
- 函数逻辑不规范:入参被内部逻辑直接覆盖,没有实际接收国家列表的作用;函数仅打印结果未按要求返回元组,无法被后续逻辑调用。
- 正则匹配方式错误:使用
match()方法逐词匹配字符串开头内容,既无法定位整个国家名里的连续重复字母,也无法提取重复字母用于排序。
修正后的实现代码
import re def get_doubled_letter_countries(countries): """ 构造并返回包含连续重复字母的国家组成的元组 元组排序规则:按国家名中连续重复字母的字母表顺序排序 """ # 编译正则:匹配字符串中任意位置的连续相同字母,捕获重复的单个字符 doubled_pattern = re.compile(r'(.)\1', re.IGNORECASE) matched_entries = [] for country in countries: match_result = doubled_pattern.search(country) if match_result: # 提取重复字母,转小写作为排序主键 repeat_char = match_result.group(1).lower() # 国家名统一转小写,完整保留原始结构(含空格、连字符) normalized_country = country.lower() matched_entries.append((repeat_char, normalized_country)) # 排序:先按重复字母的字典序排序,重复字母相同时按国家名本身的字典序排序 matched_entries.sort(key=lambda item: (item[0], item[1])) # 提取排好序的国家名称,转换为元组返回 return tuple(entry[1] for entry in matched_entries)
代码修正点说明
- 不再拆分国家名:直接对完整的国家名字符串做正则匹配,完整保留多词国家、带连字符国家的原始结构,不会出现名称破碎的问题。
- 统一格式输出:所有存入结果的国家名统一转换为小写,和预期输出的格式完全匹配。
- 正确实现排序规则:将每个国家提取到的连续重复字母作为排序主依据,按字母表顺序排列;重复字母相同的国家按照名称本身的字典序排列,最终得到的结果顺序和预期完全一致。
- 规范函数逻辑:函数接收完整的国家列表作为入参,最终返回构造好的元组,而非直接打印,符合函数的设计要求。
- 优化正则匹配逻辑:使用
search()方法在整个国家名字符串中查找连续重复字母,准确捕获用于排序的字符,避免逐词匹配导致的逻辑错误。
内容的提问来源于stack exchange,提问作者Riel
相关产品推荐
相关产品推荐

