Python - найти элемент с максимальным количеством вхождений в списке - PullRequest
48 голосов
/ 08 августа 2011

В Python у меня есть список:

L = [1, 2, 45, 55, 5, 4, 4, 4, 4, 4, 4, 5456, 56, 6, 7, 67]  

Я хочу идентифицировать предмет, который встречался наибольшее количество раз. Я могу решить это, но мне нужен самый быстрый способ сделать это. Я знаю, что есть хороший ответ Pythonic на это.

Ответы [ 12 ]

0 голосов
/ 03 июля 2017

Ниже приводится решение, которое я придумала, если в строке несколько символов, все из которых имеют самую высокую частоту.

mystr = input("enter string: ")
#define dictionary to store characters and their frequencies
mydict = {}
#get the unique characters
unique_chars = sorted(set(mystr),key = mystr.index)
#store the characters and their respective frequencies in the dictionary
for c in unique_chars:
    ctr = 0
    for d in mystr:
        if d != " " and d == c:
            ctr = ctr + 1
    mydict[c] = ctr
print(mydict)
#store the maximum frequency
max_freq = max(mydict.values())
print("the highest frequency of occurence: ",max_freq)
#print all characters with highest frequency
print("the characters are:")
for k,v in mydict.items():
    if v == max_freq:
        print(k)

Входные данные: "привет люди"

Выходные данные:

{'o': 2, 'p': 2, 'h': 1, ' ': 0, 'e': 3, 'l': 3}

самая высокая частота вхождения: 3

символы:

e

l
0 голосов
/ 07 декабря 2016

Я хочу добавить другое решение, которое выглядит красиво и быстро для коротких списков.

def mc(seq=L):
    "max/count"
    max_element = max(seq, key=seq.count)
    return (max_element, seq.count(max_element))

Вы можете сравнить это с кодом, предоставленным Недом Дейли, который даст вамэти результаты для наименьшего теста:

3.5.2 (default, Nov  7 2016, 11:31:36) 
[GCC 6.2.1 20160830] 

dict iteritems (4, 6) 0.2069783889998289
dict items (4, 6) 0.20462976200065896
defaultdict iteritems (4, 6) 0.2095775119996688
sort groupby generator expression (4, 6) 0.4473949929997616
sort groupby list comprehension (4, 6) 0.4367636879997008
counter (4, 6) 0.3618192010007988
max/count (4, 6) 0.20328268999946886

Но будьте осторожны, это неэффективно и, таким образом, действительно медленно для больших списков!

...