Найти максимум ключа, который имеет продукт максимум ключа и значения

Я получил вывод, я в поиске лучшего решения

a = [3,4,5,5,6,6,6,7,7]
c = set(a)
counts = {}
for i in a:
    if i in counts:
        counts[i] += 1
    else:
        counts[i] =1
#counts
t = [k*v for k,v in counts.items()]
max_index = t.index(max(t))
list(c)[max_index]

6

Нет ошибок, как оптимизировать код. нужно понимание списка на позиции

Для [k * v для k, v в countts.items ()]. Могу ли я добавить функцию карты к этому?

0
Nons 9 Июл 2019 в 20:13

3 ответа

Лучший ответ

Вы можете использовать collection.Counter или collections.defaultdict с int для подсчета для вас (оба быстрее, чем ваше -valid- решение).

Чтобы получить максимальное значение, используйте sorted() - см. Обзор сортировки с подходящая key функция:

from collections import Counter

a = [3,4,5,5,6,6,6,7,7]
c = Counter(a)

m = sorted(c.items(),key= lambda x: x[0]*x[1], reverse = True)
print(m)

Печать

[(6, 3), (7, 2), (5, 2), (4, 1), (3, 1)]

Поэтому m[0][0] будет вашим результатом 6.

max(...) также может использовать ту же функцию клавиш, если вас интересует только максимальное значение.


Версия Defaultdict (больше строк, чем Counter):

from collections import defaultdict

a = [3,4,5,5,6,6,6,7,7]
c = defaultdict(int)
for num in a:
    c[num] += 1
1
Patrick Artner 9 Июл 2019 в 17:27

Измените свой словарь, чтобы значения уже умножались на ключи. Тогда вы можете использовать одно из решений в Получение ключа с максимальным значением в словаре? найти ключи с максимальным значением.

for i in a:
    if i in counts:
        counts[i] += i
    else:
        counts[i] = i
1
Barmar 9 Июл 2019 в 17:24

Вот как вы можете использовать карту, чтобы получить список "т"

def function(item):
    return item[0]*item[1]
t = list(map(function, counts.items()))
1
Woobensky Pierre 9 Июл 2019 в 17:52