2013-07-18 9 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"])