如何用Python列表推导式生成按索引统计对应数字出现次数的列表
问题解答
完全可以用Python列表推导式实现该需求,具体实现方法如下:
基础实现(已知n的取值)
示例中的n为4,直接遍历0到n的所有整数,统计每个整数在输入列表中的出现次数即可:
# 注意不要使用input作为变量名,会覆盖Python内置的input()函数 input_list = [4, 4, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 2, 2, 2] n = 4 output = [input_list.count(i) for i in range(n + 1)]
运行后得到的output值为[0, 2, 7, 4, 2],和预期输出完全匹配。
通用实现(无需提前知道n的取值)
如果不知道n的具体值,可以直接取输入列表的最大值作为n的上限:
input_list = [4, 4, 2, 2, 2, 2, 3, 3, 3, 3, 1, 1, 2, 2, 2] output = [input_list.count(i) for i in range(max(input_list) + 1)]
补充说明
如果输入列表的长度非常大,上述写法每次调用count()都会全量遍历一次输入列表,时间复杂度较高。如果允许额外代码预处理,可以先用collections.Counter统计频率后再生成列表,不过如果要求仅用列表推导式实现需求,上述写法完全满足要求。
内容的提问来源于stack exchange,提问作者sdawar
相关产品推荐
相关产品推荐

