计算包含Python中元素的列表数

时间:2013-07-13 20:17:25

标签: python list dictionary count

如何创建一个列表,其中包含元素在多个列表中出现的次数。例如,我有这些列表:

list1 = ['apples','oranges','grape']
list2 = ['oranges, 'oranges', 'pear']
list3 = ['strawberries','bananas','apples']
list4 = [list1,list2,list3]

我想计算包含每个元素的文档数量并将其放入字典中,因此对于apple ^和oranges,我得到了这个:

term['apples'] = 2
term['oranges'] = 2   #not 3

3 个答案:

答案 0 :(得分:0)

使用collections.Counter

from collections import Counter
terms = Counter( x for lst in list4 for x in lst )
terms
=> Counter({'oranges': 3, 'apples': 2, 'grape': 1, 'bananas': 1, 'pear': 1, 'strawberries': 1})
terms['apples']
=> 2

正如@Stuart指出的那样,您也可以使用chain.from_iterable来避免生成器表达式中的笨拙双循环(即for lst in list4 for x in lst)。

编辑:另一个很酷的伎俩是取Counter s的总和(受this着名答案的启发),如:

sum(( Counter(lst) for lst in list4 ), Counter())

答案 1 :(得分:0)

print (list1 + list2 + list3).count('apples')

或者如果您已在list4中编译了所有列表,则可以使用itertools.chain作为链接它们的快捷方式:

from itertools import chain
print list(chain.from_iterable(list4)).count('apples')

编辑:或者您可以在没有itertools的情况下执行此操作:

print sum(list4, []).count('apples') 

如果由于某种原因你想要...... {/ p>,可以很容易地复制collections.Counter

all_lists = sum(list4, [])
print dict((k, all_lists.count(k)) for k in set(all_lists))

答案 2 :(得分:0)

>>> [el for lst in [set(L) for L in list4] for el in lst].count('apples')
2
>>> [el for lst in [set(L) for L in list4] for el in lst].count('oranges')
2

如果您希望最终结构为字典,可以使用字典理解从展平的集合列表中创建直方图:

>>> list4sets = [set(L) for L in list4]
>>> list4flat = [el for lst in list4sets for el in lst]
>>> term = {el: list4flat.count(el) for el in list4flat}
>>> term['apples']
2
>>> term['oranges']
2