x = [['a', 'b', 'c'], ['a', 'c', 'd'], ['e', 'f', 'f']]
ランダムな str 文字のリストがあるとします。関数を作成して、文字「a」が何回出てくるかを教えてくれます。この場合は 2 です。または、「b」のような他の文字は 1 回出て、「f」は 2 回出てきます。など ありがとうございます!
x = [['a', 'b', 'c'], ['a', 'c', 'd'], ['e', 'f', 'f']]
ランダムな str 文字のリストがあるとします。関数を作成して、文字「a」が何回出てくるかを教えてくれます。この場合は 2 です。または、「b」のような他の文字は 1 回出て、「f」は 2 回出てきます。など ありがとうございます!
リストを平坦化して使用できますcollections.Counter
:
>>> import collections
>>> x = [['a', 'b', 'c'], ['a', 'c', 'd'], ['e', 'f', 'f']]
>>> d = collections.Counter(e for sublist in x for e in sublist)
>>> d
Counter({'a': 2, 'c': 2, 'f': 2, 'b': 1, 'e': 1, 'd': 1})
>>> d['a']
2
import itertools, collections
result = collections.defaultdict(int)
for i in itertools.chain(*x):
result[i] += 1
result
これにより、文字をキーとし、その数を値とする辞書が作成されます。
sum()
参考までに、単一のネストされたリストをフラット化するために使用できます。
>>> from collections import Counter
>>>
>>> x = [['a', 'b', 'c'], ['a', 'c', 'd'], ['e', 'f', 'f']]
>>> c = Counter(sum(x, []))
>>> c
Counter({'a': 2, 'c': 2, 'f': 2, 'b': 1, 'e': 1, 'd': 1})
しかし、Blender と John Clements が述べたように、itertools.chain.from_iterable()
もっと明確かもしれません。
>>> from itertools import chain
>>> c = Counter(chain.from_iterable(x)))
>>> c
Counter({'a': 2, 'c': 2, 'f': 2, 'b': 1, 'e': 1, 'd': 1})