如何使用含count()的字典推导式生成列表元素频率表
正确实现代码
你要的用count()配合字典推导式的写法如下:
freq = {lang: languages.count(lang) for lang in set(languages)}
原理解释
- 首先通过
set(languages)拿到原列表中所有不重复的语言项,避免遍历原列表时重复统计同一个语言,也不会生成重复的字典键 - 对每一个唯一的语言项,调用列表内置的
count()方法,直接统计该语言在原列表中的出现次数,作为字典对应键的值
补充说明
- 这种写法代码非常简洁,适合小数据量的统计场景。但因为每次
count()都要遍历一次全列表,时间复杂度是O(n²),如果是处理超大规模的列表,性能会远低于你原本写的O(n)复杂度的普通循环写法。 - 如果你用的是Python 3.7及以上版本,想要频率表的键顺序和语言在原列表中首次出现的顺序一致,可以把去重逻辑改成
dict.fromkeys(languages).keys(),写法如下:
freq = {lang: languages.count(lang) for lang in dict.fromkeys(languages).keys()}
内容的提问来源于stack exchange,提问作者Zy Taga
相关产品推荐
相关产品推荐

