如何用Python Counter统计多个列表中的唯一值数量?
解决方法
要统计嵌套列表中所有唯一单词的数量,核心是先把嵌套结构里的所有单词整合到一个可迭代对象中,再进行统计。这里提供几种实用的实现方式:
方式一:用生成器表达式扁平化列表
直接将所有子列表的元素一次性传入Counter:
from collections import Counter my_list = [ ['My', 'name', 'is', 'Joe'], ['My', 'name', 'is', 'Sally'], ['My', 'name', 'is', 'Mike'] ] # 遍历所有子列表,取出每个单词 counter_object = Counter(word for sublist in my_list for word in sublist) # 统计唯一单词的数量 num_unique = len(counter_object.keys()) print(num_unique) # 输出:6
方式二:用itertools.chain合并子列表
借助itertools模块的chain工具,可以更简洁地合并所有子列表:
from collections import Counter from itertools import chain my_list = [ ['My', 'name', 'is', 'Joe'], ['My', 'name', 'is', 'Sally'], ['My', 'name', 'is', 'Mike'] ] # 合并所有子列表为一个迭代器 counter_object = Counter(chain.from_iterable(my_list)) num_unique = len(counter_object) print(num_unique) # 输出:6
更高效的简化方案(无需Counter)
如果只需要统计唯一单词数量,不需要计数每个单词出现的次数,直接用集合(set)处理会更高效:
my_list = [ ['My', 'name', 'is', 'Joe'], ['My', 'name', 'is', 'Sally'], ['My', 'name', 'is', 'Mike'] ] # 将所有单词存入集合(自动去重) unique_words = set(word for sublist in my_list for word in sublist) num_unique = len(unique_words) print(num_unique) # 输出:6
内容的提问来源于stack exchange,提问作者wellsinsideout
相关产品推荐
相关产品推荐

