Python入门:如何用基础方法获取列表中元音数最多的前三个国家
适合Python新手的实现方案
你现有代码存在一个逻辑问题:最后返回值用了硬编码的countries[234],没有用到前面计算得到的最大值下标location_most_vowel,可以先把这个问题修正。
不需要用到nlargest这类进阶方法,只用你已经学过的for循环和基础内置函数就可以实现需求,核心思路如下:
- 先遍历所有国家,将「国家名称」和「对应元音数量」成对存储为元组,生成一个新的统计列表
- 循环三次,每次从统计列表里找出元音数最大的条目,加入结果列表后,把该条目从统计列表中移除,避免重复选取
- 最终返回收集到的三个结果即可
实现代码如下:
def top_three_most_vowels(countries): vowels = ["A", "a", "E", "e", "I", "i", "O", "o", "U", "u"] # 第一步:生成(元音数量, 国家名)的统计列表 country_vowel_counts = [] for country in countries: vowel_count = len(set(country).intersection(set(vowels))) country_vowel_counts.append( (vowel_count, country) ) # 第二步:循环三次取最大的三个值 top_three = [] for _ in range(3): # 找当前列表里的最大值 current_max = max(country_vowel_counts) # 加入结果列表 top_three.append(current_max[1]) # 从统计列表移除已经选过的最大值,避免重复选 country_vowel_counts.remove(current_max) return top_three
代码说明
- 用到的都是Python基础语法:for循环、元组、
max()函数、list.remove()方法,都是入门阶段会覆盖的内容 - 如果要处理并列排名的情况也可以基于这个逻辑扩展,比如遍历统计列表把所有和当前最大值相等的条目都取出来,直到凑够三个为止
- 如果希望返回结果同时带元音数量,把
current_max[1]改成current_max即可
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

