Как получить количество значений, повторяющихся в списке в позиции индекса 1?

#python

Вопрос:

Как подсчитать количество значений, повторяющихся в списке на первой позиции, и суммировать на основе этого

Мой вклад :

 [[2, 1], [2, 1], [2, 1], [1, 2]]
 

Примечание : мой список будет содержать 2 ИЛИ 1 в первом индексе[0]

В приведенном выше 2 повторяется максимальное количество раз, поэтому моя сумма должна быть такой: получить второе значение всех и выполнить суммирование и отображение

     2 , 1  -> 1  
    2 , 1  -> 1  
    2 , 1  -> 1 
---------------------- 
    2 , 3 
 

Таким образом, выход будет : 2 , 3

Как получить вышеуказанный результат с заданного ввода

В моем коде не удается реализовать такую логику

 cnt=0
m[0]=0
for m in my_list:
    if m[0] == 2 
       cnt =1
       v=m[1]
 
print(m[0],v[1]) 
 

Комментарии:

1. Не могли бы вы более четко сформулировать свои ожидания и показать нам пример расчета, который приведет к 2, 3

2. @AlexandreMahdhaoui : Я отредактировал его, просто нужно указать значения второй позиции

Ответ №1:

Попробуй:

 #create a list with just the 0th elements
keys = [i[0] for i in l]

#get the key that has the maximum count
max_key = max(keys, key=keys.count) 

#sum the 1st element for all sublists where the 0th element is the same as the max_key
>>> max_key, sum(i[1] for i in l if i[0]==max_key) 
(2, 3)
 

В одной строке (не рекомендуется, так как она не очень читабельна):

 >>> max([i[0] for i in l], key=[i[0] for i in l].count), sum(i[1] for i in l if i[0]==max([i[0] for i in l], key=[i[0] for i in l].count))
(2, 3)
 

Ответ №2:

Предположим, мы знаем, что 2 является наиболее распространенным 1-м пунктом, вот понимание списка в одну строку, чтобы составить сумму:

 [2, sum(x[1] for x in l if x[0]==2)]
#    ^    ^                  ^
#    |    |                  -- if 1st item is 2
#    |    -- extract 2nd item
#    -- sum all the 2nd items
 

Чтобы найти наиболее распространенный 1-й элемент, мы можем использовать коллекции.Счетчик:

 from collections import Counter
Counter(x[0] for x in l).most_common(1)  # [(2, 3)]
 

Соединил все воедино:

 n = Counter(x[0] for x in l).most_common(1)[0][0]
[n, sum(x[1] for x in l if x[0]==n)]  # [2, 3]