Подсчитайте частоту n-го элемента каждого списка в большом списке

Я видел решения для подсчета значений в простом списке, но что, если у вас есть список списков?

Пример:

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

Как мне подсчитать, сколько раз второе значение каждого подсписка равно 55?


person Waterman    schedule 21.11.2015    source источник


Ответы (2)


Сделайте из него новый генератор и передайте его 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().

person TigerhawkT3    schedule 21.11.2015
comment
Я хочу подсчитать количество 55-летних, т.е. количество раз, когда 55 встречается как второе значение во всех подстроках. В моем примере ответ должен быть 2. - person Waterman; 21.11.2015

Данный:

>>> 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)]

И подсчитайте 55 в n-м элементе:

>>> 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 

Если вам нужны ВСЕ счетчики, используйте счетчик:

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