x = [['a', 'b', 'c'], ['a', 'c', 'd'], ['e', 'f', 'f']]
假设我们有一个带有随机 str 字母的列表。我如何创建一个函数,以便它告诉我字母“a”出现了多少次,在这种情况下为 2。或任何其他字母,如“b”出现一次,“f”出现两次。等谢谢!
x = [['a', 'b', 'c'], ['a', 'c', 'd'], ['e', 'f', 'f']]
假设我们有一个带有随机 str 字母的列表。我如何创建一个函数,以便它告诉我字母“a”出现了多少次,在这种情况下为 2。或任何其他字母,如“b”出现一次,“f”出现两次。等谢谢!
您可以展平列表并使用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})