14

如何计算使用嵌套列表制作的多维数组中某个值的出现次数?如在以下列表中查找“foobar”时:

list = [['foobar', 'a', 'b'], ['x', 'c'], ['y', 'd', 'e', 'foobar'], ['z', 'f']]

它应该返回2

(是的,我知道我可以编写一个循环来搜索所有内容,但我不喜欢该解决方案,因为它相当耗时,(编写和运行时))

.count 也许?

4

3 回答 3

21
>>> list = [['foobar', 'a', 'b'], ['x', 'c'], ['y', 'd', 'e', 'foobar'], ['z', 'f']]
>>> sum(x.count('foobar') for x in list)
2
于 2013-07-18T08:27:29.347 回答
7

首先使用 将列表连接在一起,然后使用itertoolsCollections模块计算每次出现的次数:

import itertools
from collections import Counter

some_list = [['foobar', 'a', 'b'], ['x', 'c'], ['y', 'd', 'e', 'foobar'], ['z', 'f']]
totals = Counter(i for i in list(itertools.chain.from_iterable(some_list)))
print(totals["foobar"])
于 2013-07-18T08:33:23.017 回答
4
>> from collections import Counter
>> counted = Counter([item for sublist in my_list for item in sublist])
>> counted.get('foobar', 'not found!')
>> 2
#or if not found in your counter
>> 'not found!'

这使用了子列表的展平,然后使用集合模块和计数器 来产生字数。

于 2013-07-18T08:33:03.560 回答