Перейти к содержимому

Как найти самый частый элемент в списке python

  • автор:

Задача » Самое частое число» (питон)

Дан список. Не изменяя его и не используя дополнительные списки, определите, какое число в этом списке встречается чаще всего.

Если таких чисел несколько, выведите любое из них.

Входные данные
Вводится список чисел. Все числа списка находятся на одной строке.

Выходные данные
Выведите ответ на задачу.

входные данные
1 2 3 2 3 3
выходные данные
3

Лучший ответ

ну, самый простой метод — «жадный»
s = [1,2,3,2,3,3]
max = s[0]
max_count = s.count(max)
for el in s:
__if s.count(el)>max_count:
____max = el
____max_count = s.count(el)
print(max)

оговорюсь что он простой, но не оптимальный.
Вообще, оптимальность тут зависит от количества элементов и их диапазона.
Например если в списке очень много элементов и большинство из них однотипно, то не нарушая условия (не создавать доп. списки) можно создать набор:
s = [1,2,3,4,3,3,3,2,2,1,5]
set_s = set(s)
max = set_s[0]
max_count = 1
for el in set_s:
__cut_count = s.count(el)
__if cur_count>max_count:
____max = s.count(el)
____max_count = cur_count
print(max)
-это позволит выполнять цикл подсчета только для уникальных элементов, а не всех из списка.

ну, в принципе можно много еще чего придумать.

Lex MinchenkovУченик (104) 1 год назад
Спасибо. Помогли разобраться.
Остальные ответы

правильное решение задачи, плюс проходит компиляцию

s = list(map(int, input().split()))
max = s[0]
max_count = s.count(max)
for el in s:
if s.count(el)>max_count:
max = el
max_count = s.count(el)
print(max)

Виктор РоговУченик (174) 2 года назад
можно объяснить пж
Rozimadlen HakobyanЗнаток (409) 2 года назад
А что считает max_count = s.count(max) и для чего? понять не могу

n=10
a=[]
for i in range(n):
a.append(int(input(«Введите элемент массива >>\n»)))
print(a)

count=1
maxcount=0
c=0
for i in range(0,n-1):
for j in range(i+1,n):
if a[i]==a[j]:
count+=1
if count>maxcount:
maxcount=count
c=a[i]
count=1
else:
count=1
print(c)

Как найти самый частый символ в строке?

Смотрел готовые решения, но ничего подходящего не нашел, либо они были сложными и надо было подключать модуль Counter.

Можно ли как-то проще решить?

  • Вопрос задан более трёх лет назад
  • 13391 просмотр

2 комментария

Простой 2 комментария

Сергей Горностаев @sergey-gornostaev Куратор тега Python
Три строки, включая импорт Counter — это сложно?
VishenkaNaTorte @VishenkaNaTorte Автор вопроса
Сергей Горностаев, Я лишь говорю про те решения, которые я видел. Наверняка есть другой способ
Решения вопроса 1

kshnkvn

yay ✌️ t.me/kshnkvn

foo = 'cccc8923jbbdkcc' max_item = lambda s: max(t := , key=t.get) max_item(foo) # 'c'

P.S. Это будет работать только для Python3.8+
Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать
Ответы на вопрос 4

sswwssww

string = 'fgfhsadsssssllfd' counted_chars = <> for char in string: if char in counted_chars: counted_chars[char] += 1 else: counted_chars[char] = 1 print(max(counted_chars))
from collections import defaultdict string = 'fgfhsadsssssllfd' counted_chars = defaultdict(int) for char in string: counted_chars[char] += 1 print(max(counted_chars))

p.s.: я мягко говоря в шоке от того что тут предлагают все возможные заковыристые(привет дзен Python ) и не работающие даже на p.s. 2: лучше юзать Counter

Ответ написан более трёх лет назад
Нравится 1 14 комментариев

kshnkvn

От шока условия задачи не прочитал?

sswwssww

Ivan Yakushenko, когда куратор тега Python дает имя лямбда функциям и не такое проморгаешь.

kshnkvn

sswwssww, в какой из вселенных это считается плохим?

sswwssww

5f88a4a6bb588538726155.jpeg

Ivan Yakushenko, во вселенной где есть PEP 8, например.

kshnkvn

sswwssww, ой, прости пожалуйста, как я мог забыть за pep, это же спецификации, а не соглашение и его нужно придерживаться всегда и везде.
P.S. Только не обижайся, у меня нет цели тебя оскорбить или задеть, просто автор «смотрел готовые решения» и они ему не подошли, предложил вариант с учетом некоторого нововведения в python 3.8 и раз ему оно подошло — хорошо и не более.
P.S.2. Не нужно умничать, когда сам не в состоянии прочитать условие, которое в 3х предложениях повторяется 3 раза.
P.S.3. Не нужно обвинять кого то в своей собственной ошибке.

sswwssww

Ivan Yakushenko, твой код херня полная, вот что я хочу сказать. Он нарушает дзен Python и PEP 8, доставляет проблемы при просмотре трассировок ошибок, еще и медленно работает за счет избыточности. Код должен быть таким чтобы ты просто читал его как текст, а не ребусы решал. Поверь, никто не хочет ковыряться в выпендреже на 1 строке, который еще и работает только в 3.8+ . «Не нужно обвинять кого то в своей собственной ошибке.» — к чему это вообще сказано, хрен его знает.
p.s. Как думаешь, почему лямбда функции называют анонимными?
p.s. 2. PEP 8 нужно придерживаться везде где это можно сделать, этот пример явно относится к этой категории.
p.s. 3. Прости, добавил вызов одной функции специально для тебя, теперь соответствует вопросу.

string = 'fgfhsadsssssllfd' counted_chars = <> for char in string: if char in counted_chars: counted_chars[char] += 1 else: counted_chars[char] = 1 print(max(counted_chars))

kshnkvn

Он нарушает дзен Python и PEP 8

Вообще плевать, строка написана из спортивного интереса и не более.

еще и медленно работает за счет избыточности

Да, точно, разница в N наносекунд — это просто жесть как долго. Че еще расскажешь?

Код должен быть таким чтобы ты просто читал его как текст, а не ребусы решал

Код должен быть таким, что бы выполнялось определенное задание в рамках условий, остальное — шашечки оговариваемые в частных случаях.

Поверь, никто не хочет ковыряться в выпендреже на 1 строке

Ты прям опрос проводил среди всех людей связанных с программированием и прям 100% из них без исключительно этого не хочет?

к чему это вообще сказано, хрен его знает

К тому, что «когда куратор тега Python дает имя лямбда функциям и не такое проморгаешь.». У тебя помимо невнимательности еще и память так себе.

этот пример явно относится к этой категории

И какие же «явные» особенности этого примера причисляют его к этой категории?

Прости, добавил вызов одной функции специально для тебя, теперь соответствует вопросу.

Не, не прощаю, не люблю поговорку «лучше поздно, чем никогда», раз облажался, так прими это с гордостью.

sswwssww

Вообще плевать

— дальше не читал.

kshnkvn

sswwssww, врешь, читал, просто тебе ответить нечего. Как итог данного замечательного диалога ты — невнимательный, тщеславный врунишка.

sswwssww

Ivan Yakushenko, я это написал к тому, что нет смысла говорить о том как должен выглядеть хороший код человеку которому «вообще плевать» на код. «Дальше не читал» — это выражение-мем означающее не то что реально не читал, а то что можно не читать. Так что твои обвинения безосновательны.

kshnkvn

человеку которому «вообще плевать» на код

Процитируй мне моё сообщение, где мне «плевать на код». Я так понимаю к уже определенным твоим качествам стоит добавить еще и плохое зрение.

это выражение-мем означающее не то что реально не читал

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

Так что твои обвинения безосновательны.

Процитируй мне моё сообщение, где я тебя хоть в чем то обвиняю.

Просто напоминаю — это не я, а ты написал ответ в стиле «смотрите какой я крутой, а все дурачки», но при этом облажался с решением. Ха.

И что бы не опускать тему про pep — это всего лишь общепринятое универсальное соглашение, но универсальность не покрывает специфику, соответственно в некоторых командах/компания данное соглашение обсуждается и некоторые пункты, а иногда и многие могут опускаться в угоду различным обстоятельствам.

sswwssww

Ivan Yakushenko, тебе плевать на скорость работы кода, плевать на удобочитаемость, плевать на pep8, плевать на дзен Python, плевать на то что твой код не работает на любых версиях ниже 3.8.
Ты обвинил меня во вранье как минимум.
Дружок, я знаю что такое pep8, ты можешь писать хоть 1000 символов на 1 линии и кричать что пеп это лишь советы, но попробуй пописать в таком стиле в любой более менее уважающей себя компании, поверь тебя вышвырнут в первый же день.
Русский язык это лишь инструмент выражения мыслей, и помимо этого инструмента у людей есть такие как сарказм, ирония и т.д., печально если ты не умеешь ими оперировать и воспринимаешь любой текст — буквально.
Забавно что человек пишущий уродливый код ради выпендрежа обвиняет меня выпендреже.
Ты подаёшь плохой пример новичкам, я тебе на это указал, вот и все, к чему раздувать тут комменты.

kshnkvn

Забавно что человек пишущий уродливый код ради выпендрежа обвиняет меня выпендреже.

Выключай фантазию, она тебя не туда ведет. Я написал всего одну строчку кода (3, если быть максимально точным), исходя из посыла автора в контексте того, что он уже что то гуглил и пробовал и «стандартные» решения, почему то, ему не подошли. Это единственная причина по которой была написана тут это строчка. Все, больше я не написал ни слова, кроме единственного условия, при котором эта строчка будет работать. С чего ты делаешь выводы про мой «выпендреж» мне не ясно. Или по твоему все люди, которые увлекаются код-гольфингом — выпендрежники?

Единственный человек, который тут выделывается — это ты. Еще раз напоминаю — ты написал сообщение в стиле «я в шоке, какие тут все глупые, вот смотри как все должно быть» и при этом умудрился облажаться не выполнив условие, которое написано 3 раза в 3х предложениях. Серьезно? Это насколько глупым и самовлюбленным нужно быть, что бы после этого вообще хоть что-то писать.

Ты обвинил меня во вранье как минимум.

Да, точно, я это сделал. Извиняюсь что забыл, что ты солгал.

но попробуй пописать в таком стиле в любой более менее уважающей себя компании, поверь тебя вышвырнут в первый же день

Если у тебя не хватает мозгов разделять код-гольфинг и работу в любом её проявлении, то мне тебя искренне жаль.

тебе плевать на скорость работы кода, плевать на удобочитаемость, плевать на pep8, плевать на дзен Python, плевать на то что твой код не работает на любых версиях ниже 3.8

Можешь, пожалуйста, расписать мне твою логическую цепочку на основании которой ты сделал столько многозначительных выводов всего по 1 строчке кода?

sswwssww

Процитируй мне моё сообщение, где мне «плевать на код». Я так понимаю к уже определенным твоим качествам стоит добавить еще и плохое зрение.

Он нарушает дзен Python и PEP 8
Вообще плевать, строка написана из спортивного интереса и не более.

Просто напоминаю — это не я, а ты написал ответ в стиле «смотрите какой я крутой, а все дурачки», но при этом облажался с решением. Ха.

— ты сам приплел мне то что я не писал и сам же отвечаешь на это, забавно.

ты написал сообщение в стиле «я в шоке, какие тут все глупые, вот смотри как все должно быть» и при этом умудрился облажаться не выполнив условие

— x2. НЕ ВЫПОЛНИВ УСЛОВИЕ!11 ужас, забыл добавить max() к выводу, ЭТО ЖЕ ВООБЩЕ В КОРНЕ ВСЕ МЕНЯЕТ!!1 НУЖНО ВСЮ ПРОГРАММУ ПЕРЕПИСЫВАТЬ.
Если подводить итоги, ты называл меня: невнимательным, тщеславным, врунишкой, глупым, самовлюбленным, у меня плохое зрение и память.
Цитируем тебя же, до этого:

Только не обижайся, у меня нет цели тебя оскорбить или задеть

От меня ты услышал: выпендрежник, у тебя хреновый код.
И я называл тебя так обоснованно, в отличие от тебя.
Если по существу, твой код в одну строчку годиться только для выпендрежа, и все, точка. Его можно использовать только для того чтобы покрасоваться перед новичками. Если ты считаешь что так можно писать на проде или любом другом проекте — то ты глуп, объективно. Ты не можешь утверждать обратное, как бы тебе не хотелось выйти отсюда победителем, т.к. ты изначально был в проигрышной позиции. Не вижу смысла продолжать этот пустой диалог.

Самый частый символ

Хочу сделать чтобы я вводил слово и мне писало символ который появляется в слове наиболее часто. Не лезет в голову как можно сделать это. Пожалуйста помогите. Например у нас есть слово: приоритет. Нам должно вывести, что наиболее частый символ это и, т . Не нужно чтобы оно писало количество, а только выводило символ.

Отслеживать
16.4k 2 2 золотых знака 15 15 серебряных знаков 24 24 бронзовых знака
задан 12 ноя 2019 в 14:26
125 1 1 золотой знак 2 2 серебряных знака 7 7 бронзовых знаков

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

from collections import Counter word = 'приоритет' c = Counter(word) print(c.most_common(1)[0][0]) 

Т.к. метод most_common возвращает список самых частых значений (даже если мы запросили одно самое частое значение), то нужно взять первый элемент (для этого нужен первый [0] ). Каждый элемент в этом списке — пара (элемент, количество) , поэтому нужно взять первый элемент еще раз.

Вообще, в слове «приоритет» есть 3 буквы, которые встречаются по два раза (р, и, т), выведет только одну из них (у меня вывело «р»).

Вариант решения без использования Counter :

word = 'приоритет' # Подсчитываем количество вхождений каждой буквы в слове c = dict() for letter in word: c[letter] = c.get(letter, 0) + 1 # .get(letter, 0) вернет значение по ключу letter или 0, если такого ключа нет print(c) # # Выводим ключ, которому соответствует наибольшее из значений # (точнее, один из таких ключей) print(max(c.items(), key=lambda item: item[1])[0]) # р 

9 лайфхаков со списками и словарями Python для следующего собеседования по программированию

Списки и словари являются одними из наиболее часто используемых структур данных для программирования на Python.

В этом посте я делюсь 9 лайфхаками для списков и словарей Python. Поскольку списки и словари являются одними из наиболее часто используемых структур данных в Python, понимание и способность использовать эти фрагменты кода для различных вариантов использования позволит вам стать лучшим программистом на следующем собеседовании.

1. Сглаживание списка

Когда вам дан многоуровневый список или массив, который не является одномерным, вы можете захотеть сгладить его до простого списка.

lst = [[2,3], [4,5], [6,7]] # Use List Comprehension flatten\_lst = [i for j in lst for i in j ] flatten\_lst >> [2,3,4,5,6,7]

2. Самый частый элемент в списке

Функция Counter из пакета Collections удобна для отслеживания количества различных элементов в списке. Пакет Collections является пакетом по умолчанию и поэтому не требует дополнительной установки, если у вас уже установлен Python.

import Counter from collections l = [1,1,3,4,1,5,6,7,7,2,9] freq_element = Counter(1).most_common()[0][0] freq_element >> 1

3. Распечатайте все комбинации списка

Напоминаем, что комбинация — это математический метод, который определяет количество возможных расположений в наборе элементов, где порядок выбора не имеет значения.

Пакет Itertools , как следует из названия, содержит множество функций, включающих итерации. Комбинации также требуют итераций и поэтому включены в этот пакет в двух разных формах (т.е. combinations , combinations_with_replacement ) в зависимости от того, что именно вы ищете. Itertools также является пакетом по умолчанию в Python.

from itertools import combinations, combinations_with_replacement nums = [1,2,3,4] list(combinations(nums,2)) >> [[(1,2,), (1,3), (1,4), (2,3), (2,4), (3,4)] list(combinations_with_replacement(nums,2)) >> [[(1,1),(1,2),(1,3),(1,4),(2,2),(2,3),(2,4),(3,3),(3,4),(4,4)] list(combinations(nums,3)) >> [(1,2,3),(1,2,4),(1,3,4),(2,3,4)] 

4. Инвертировать словарь

from collections import defaultdict def invert_dict(obj): inv_obj = defaultdict(list) for key, value in obj.items(): inv_obj[value].append(key) return dict(inv_obj) ## Example food= < 'cookie': 10, 'cake': 10, 'ramen': 3, >invert_dict(food) >>

5. Комбинируйте словарные значения

Defaultdict — это подкласс класса словаря, который возвращает объект, подобный словарю. Чем это отличается от обычного словаря? Хотя словарь и словарь по умолчанию почти идентичны, последний позволяет нам избежать KeyErrors. Другими словами, он предоставляет значение по умолчанию для несуществующего ключа. Эта характеристика defaultdictionary упрощает следующие операции.

from collections import defaultdict def comb_dict_val(*dicts): res = defaultdict(list) for d in dicts: for key in d: res[key].append(d[key]) return dict(res) # Example d1 = d2 = comb_dict_val(d1,d2) >>

6. Сортировать список, используя другой список в качестве индексов

def sort_by_index(lst, indexes, reverse=False): new_list = \ [val for (_, val) in sorted(zip(indexes, lst), \ key=lambda x: x[0], reverse=reverse)] return new_list a = ['jake', 'amy', 'christine', 'fernando', 'david', 'hosea'] b = [3, 2, 6, 4, 1, 5] sort_by_index(a, b) >> ['david', 'amy', 'jake', 'fernando', 'hosea', 'christine'] 

7. Группируйте различные элементы в списке на основе некоторого условия и превращайте его в словарь.

from collections import defaultdict def group_by(lst, fn): d = defaultdict(list) for el in lst: d[fn(el)].append(el) return dict(d) from math import floor # Example group_by([6.1, 4.2, 6.3], floor) >> group_by(['one', 'two', 'three'], len) >>

8. Реализуйте перетасовку списков без использования готовых функций

Используем алгоритм Фишера-Йейтса. Он создает беспристрастные случайные перестановки списков, что часто имеет решающее значение для выборки. Популяризированный Кнутом, он беспристрастен, имеет оптимальную линейную эффективность по времени; использует постоянное пространство; и является инкрементным.

from random import randint def shuffle(lst): temp_lst = deepcopy(lst) m = len(temp_lst) while (m): m -= 1 i = randint(0, m) temp_lst[m], temp_lst[i] = temp_lst[i], temp_lst[m] return temp_lst # Example foo >> [1, 2, 3] shuffle(foo) foo >> [2, 3, 1] 

9. Проверьте, удовлетворяет ли каждый элемент списка какому-либо условию

def every(lst, fn = lambda x: x): return all(map(fn, lst)) # Example every([4, 2, 3], lambda x: x > 1) >> True 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *