2013-07-18 9 views
5

Wie würde ich die Anzahl der Vorkommen eines Wertes in einem mehrdimensionalen Array mit verschachtelten Listen zählen? wie in, wenn für 'foobar' in der folgenden Liste suchen:Python .count für mehrdimensionale Arrays (Liste von Listen)

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

es 2 zurückkehren.

(ja, ich bin mir bewusst, dass ich eine Schleife schreiben könnte, die gerade durch die ganze es sucht, aber ich mag nicht, dass die Lösung, da es ziemlich zeitaufwendig ist, (zu schreiben und während der Laufzeit))

.count könnte sein?

Antwort

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!' 

Dies nutzt die Sublisten Abflachung und dann mit dem collections Modul und Counter die Zählungen von Worten zu erzeugen.

2

Erste join the lists together using itertools, dann zählen nur jedes Vorkommen mit dem 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"]) 
Verwandte Themen