2013-07-18 3 views
5

Как подсчитать количество вхождений некоторого значения в многомерном массиве, сделанное с вложенными списками? как, ища «Foobar» в следующем списке:python .count для многомерных массивов (список списков)

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

он должен вернуть 2.

(да, я знаю, что я мог бы написать цикл, который просто ищет через все это, но мне не нравится это решение, поскольку это довольно много времени, (писать и во время выполнения))

.count может быть?

ответ

9
>>> list = [['foobar', 'a', 'b'], ['x', 'c'], ['y', 'd', 'e', 'foobar'], ['z', 'f']] 
>>> sum(x.count('foobar') for x in list) 
2 
0
>> 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!' 

Это использует уплощение подсписков, а затем с помощью collections модуля и Counter производить подсчет слов.

2

Первый join the lists together using itertools, а затем просто рассчитывать каждое вхождение, используя Collections module:

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"]) 
Смежные вопросы