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