计算较大列表中每个列表的第 n 项的频率

Count Frequency of the nth item of each List within Larger List

我已经看到了对简单列表中的值进行计数的解决方案,但是如果您有一个列表列表怎么办?

示例:

list = [[Frank, 23],[Mary, 55],[Craig, 17],[Nancy, 34],[Ben, 55],[Cindy, 47]]

如何计算每个子列表的第二个值是 55 的次数?

用它制作一个新的生成器并将其传递给 sum():

>>> l = [['Frank', 23],['Mary', 55],['Craig', 17],['Nancy', 34],['Ben', 55],['Cindy', 47]]
>>> sum(item[1]==55 for item in l)
2

此外,不要将其命名为 list,否则会掩盖内置函数 list()

鉴于:

>>> li = [['Frank', 23],['Mary', 55],['Craig', 17],['Nancy', 34],['Ben', 55],['Cindy', 47]]

您可以反转矩阵:

>>> zip(*li)
[('Frank', 'Mary', 'Craig', 'Nancy', 'Ben', 'Cindy'), (23, 55, 17, 34, 55, 47)]

并计算第 n 个元素中的 55:

>>> zip(*li)[1].count(55)
2

或者,您可以使用 itemgetter 并获得第 n 项:

>>> from operator import itemgetter
>>> map(itemgetter(1), li)
[23, 55, 17, 34, 55, 47]
>>> map(itemgetter(1), li).count(55)
2 

如果您想要所有计数,请使用 Counter:

>>> from collections import Counter
>>> Counter(zip(*li)[1])
Counter({55: 2, 17: 1, 34: 1, 47: 1, 23: 1})