4

これはおそらく非常に簡単な質問ですが、他に答えが見つからないので質問します。要素がネストされたリストに表示される回数を見つける最良の方法は何ですか? 例えば:

my_list=[[a,b,c,d],[a,b,z,d],[a,c,f,e],[d,w,f,a]]

リストの最初の要素が 'a' である回数を調べるにはどうすればよいですか? または、より一般的に言えば、「a」は my_list に何回出現しますか? collections.Counterでこれを行う方法があると思いますが、私はそれを理解することができませんでした.

編集 my_list についてa:3は、リストの最初の要素であるかどうかをカウントするときの出力が必要です。が 2 番目の要素かどうかを確認するように質問が変更された場合b、目的の出力は次のようになります。b:2

4

3 に答える 3

12

ネストされたジェネレーター式を使用します。

Counter(x for sublist in my_list for x in sublist)

最初の位置にある項目を数えるには、別のジェネレーター式でその項目を取得してカウントします。

Counter(sublist[0] for sublist in my_list)

デモ:

>>> from collections import Counter
>>> my_list=[['a','b','c','d'],['a','b','z','d'],['a','c','f','e'],['d','w','f','a']]
>>> Counter(x for sublist in my_list for x in sublist)
Counter({'a': 4, 'd': 3, 'c': 2, 'b': 2, 'f': 2, 'e': 1, 'w': 1, 'z': 1})
>>> Counter(sublist[0] for sublist in my_list)
Counter({'a': 3, 'd': 1})
于 2012-08-06T13:40:36.087 に答える
3
from collections import Counter
from itertools import chain

counts = Counter(chain.from_iterable(my_list))

または、新しいリストを生成して count を使用します。

new_list = list(chain.from_iterable(my_list))
print new_list.count(whatever)

'a' が最初の回数を知りたい場合は、次のようにします。

sum(1 for el in my_list if el[0] is a) # or == a if object identity is not required
于 2012-08-06T13:42:38.160 に答える
1
>>> from collections import defaultdict, Counter
>>> my_list = [['a', 'b', 'c', 'd'], ['a', 'b', 'z', 'd'], ['a', 'c', 'f', 'e'], ['d', 'w', 'f', 'a']]
>>> pos_count = defaultdict(Counter)
>>> for sublist in my_list:
        for i, c in enumerate(sublist):
            pos_count[c][i] += 1


>>> pos_count['a'][0]
3
>>> pos_count['b'][1]
2
于 2012-08-06T13:53:49.210 に答える