1
x = [['a', 'b', 'c'], ['a', 'c', 'd'], ['e', 'f', 'f']]

假设我们有一个带有随机 str 字母的列表。我如何创建一个函数,以便它告诉我字母“a”出现了多少次,在这种情况下为 2。或任何其他字母,如“b”出现一次,“f”出现两次。等谢谢!

4

3 回答 3

6

您可以展平列表并使用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
于 2013-03-01T06:28:45.537 回答
1
import itertools, collections
result = collections.defaultdict(int)
for i in itertools.chain(*x):
    result[i] += 1

这将创建result一个字典,其中字符作为键,它们的计数作为值。

于 2013-03-01T06:28:29.343 回答
0

仅供参考,您可以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})
于 2013-03-01T06:54:15.767 回答