将Counter与列表一起使用

时间:2013-10-06 16:17:13

标签: python list python-2.7 counter

如何使用集合库中的计数器将列表列表转换为每个单词整体出现次数的计数?

E.g。 [['a','b','a','c'], ['a','b','c','d']] -> {a:2, b:2, c:2, d:1}

即。 abc出现在两个列表中,但d仅出现在一个列表中。

3 个答案:

答案 0 :(得分:10)

将生成器表达式与set一起使用:

>>> from collections import Counter
>>> seq = [['a','b','a','c'], ['a','b','c','d']]
>>> Counter(x for xs in seq for x in set(xs))
Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})

回复评论,没有生成器表达

>>> c = Counter()
>>> for xs in seq:
...     for x in set(xs):
...         c[x] += 1
...
>>> c
Counter({'a': 2, 'c': 2, 'b': 2, 'd': 1})

答案 1 :(得分:2)

以下代码段将列表项的所有出现次数都包括在内,希望对您有所帮助。

 from collections import Counter

_list = [['a', 'b', 'c', 'd', 'a'],['a', 'a', 'g', 'b', 'e', 'g'],['h', 'g', 't', 'y', 'u']]

words = Counter(c for clist in _list for c in clist)
print(words)

答案 2 :(得分:0)

from itertools import chain
from collections import Counter

seq = [['a','b','a','c'], ['a','b','c','d']]
c = Counter(chain(*[x for x in seq]))

print(c)
Counter({'a': 3, 'b': 2, 'c': 2, 'd': 1})