Python遍历列表统计元素出现次数并存储到新列表的更优实现方法
列表元素出现次数统计的优雅Python实现
你的原有写法存在重复遍历的问题:每遍历一个元素就会扫描一次完整列表统计次数,时间复杂度为O(n²),列表元素较多时效率很低。下面是几种更优雅高效的实现方案:
- 方案1:使用标准库
collections.Counter(最推荐)Counter是Python专门做频次统计的内置工具,仅需扫描一次列表就能完成全量统计,时间复杂度仅为O(n),代码简洁易读。
from collections import Counter x = ["apple", "orange", "cherry", "apple"] count_map = Counter(x) z = [count_map[item] for item in x] print(z)
- 方案2:无依赖的基础实现
如果不想导入标准库,可以用字典自行完成频次统计,效率和Counter方案一致:
x = ["apple", "orange", "cherry", "apple"] count_dict = {} # 第一次遍历完成全量统计 for item in x: count_dict[item] = count_dict.get(item, 0) + 1 # 第二次遍历生成结果列表 z = [count_dict[item] for item in x] print(z)
- 方案3:极简一行写法(仅适合短列表)
如果你的列表长度很小,不在意运行效率,可以直接用列表推导式简化原有写法:
x = ["apple", "orange", "cherry", "apple"] z = [x.count(item) for item in x] print(z)
注意:该方案和原有写法逻辑一致,时间复杂度仍为O(n²),不要用于元素数量过千的列表。
内容的提问来源于stack exchange,提问作者alex
相关产品推荐
相关产品推荐

