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

Python中如何基于list生成元素与出现次数的tuple列表并优化代码

代码优化方案

原代码存在的问题

  • 每次循环都需要两次生成临时列表[v1 for (v1,count) in tuple_count_list],额外占用内存
  • 成员判断in和index查找操作的时间复杂度都是O(k)(k是当前已统计的不同元素数量),整体时间复杂度达到O(n²),列表长度较大时性能会非常差

优化方案

方案1:使用标准库collections.Counter(最推荐)

Python内置的Counter工具专门用来做可迭代对象的频率统计,Python3.7及以上版本会默认保留元素第一次出现的插入顺序,完全符合预期输出要求。

from collections import Counter

def get_tuple_count_list(_list):
    return list(Counter(_list).items())

print(get_tuple_count_list(["a","b","b","d","e","a","a","a","c","b"]))
# 输出:[('a', 4), ('b', 3), ('d', 1), ('e', 1), ('c', 1)]

该方案时间复杂度为O(n),代码简洁易维护。

方案2:手动用字典暂存计数(不依赖内置统计库的场景)

如果不想引入collections依赖,可以用普通字典做中间存储,利用字典O(1)的查找特性提升效率:

def get_tuple_count_list(_list):
    count_dict = {}
    for v in _list:
        count_dict[v] = count_dict.get(v, 0) + 1
    return list(count_dict.items())

print(get_tuple_count_list(["a","b","b","d","e","a","a","a","c","b"]))

该方案同样是O(n)的时间复杂度,性能和Counter方案基本一致,兼容性更好;如果需要兼容Python3.7以下版本,替换普通字典为collections.OrderedDict即可保持顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:36:04