Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/56: Рейтинг темы: голосов - 56, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 10

Как найти число, встречающееся чаще всего?

27.08.2013, 12:57. Показов 11439. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Нужна небольшая помощь с задачкой.
Вот собственно и она:
======================================== ======================================== ==============
Напишите программу, которая находит число, которое встречается среди данных чисел чаще всего.

Формат вывода
Одно целое число.

Пример ввода
3, 5, 1, 2, 5
Пример вывода
5
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.08.2013, 12:57
Ответы с готовыми решениями:

Как найти число, чаще всего встречающееся в массиве?
Здравствуйте. Пытаюсь решить задачу, но не знаю, с помощью чего. Нашла несколько методов, но ни один не работает. Дан массив a из n целых...

Слово, встречающееся чаще всего
Runtime error( Дан текст. Выведите слово, которое в этом тексте встречается чаще всего. Если таких слов несколько, выведите то, которое...

Число, которое встречается чаще всего в списке = Тайм-лимит
Дан список целых чисел. Найдите число, которое встречается чаще всего в списке. Входные данные: В единственной строке содержится...

30
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.08.2013, 14:57
Ежели запихать наши числа в список mylist, то можно так:
Python
1
2
3
4
frequency = {}
for x in mylist:
    frequency[x] = frequency.get(x, 0)+1
max([(k,v) for k,v in frequency.iteritems()], key = lambda x:x[1])[0]
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.08.2013, 15:13
Python
1
2
3
4
5
6
7
8
9
10
11
12
>>> def f(lst):
...     nums = {}
...     n, nm = None, 0
...     for i in lst:
...         nums[i] = t = nums.get(i, 0) + 1
...         if t > nm:
...             n, nm = i, t
...     return n
... 
>>> f([3, 5, 1, 2, 5])
5
>>>
0
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 10
27.08.2013, 15:29  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Ежели запихать наши числа в список mylist, то можно так:
Python
1
2
3
4
frequency = {}
for x in mylist:
    frequency[x] = frequency.get(x, 0)+1
max([(k,v) for k,v in frequency.iteritems()], key = lambda x:x[1])[0]
Не работает, ошибка в iteritems
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.08.2013, 15:40
Цитата Сообщение от Dr_Temka Посмотреть сообщение
Не работает, ошибка в iteritems
Ну не знаю, стандартный метод, должно работать.
0
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 10
27.08.2013, 15:54  [ТС]
Цитата Сообщение от dondublon Посмотреть сообщение
Ну не знаю, стандартный метод, должно работать.
По моему он пишется interiyems
Не?
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
27.08.2013, 15:57
Цитата Сообщение от Dr_Temka Посмотреть сообщение
По моему он пишется interiyems
Не?
Нет, он пишется так. Это копипаста из моей консольки, где я проверил.
1
100 / 85 / 5
Регистрация: 06.05.2013
Сообщений: 242
27.08.2013, 18:12
Цитата Сообщение от Dr_Temka Посмотреть сообщение
Не работает, ошибка в iteritems
Ты какую версию Python, юзаешь? Скорее всего 3.x, а у dondublon похоже 2.x. Отсюда и ошибка.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.08.2013, 21:54
у dondublon'а там второй проход, который не нужен

Цитата Сообщение от Dr_Temka Посмотреть сообщение
По моему он пишется interiyems
в третьем это будет просто .items()
1
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 10
27.08.2013, 22:07  [ТС]
Спасибо всем!
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
29.08.2013, 13:05
Цитата Сообщение от accept Посмотреть сообщение
у dondublon'а там второй проход, который не нужен
Это типа функциональный стиль
Переменных по минимуму, только frequency, да и от неё, возможно, можно избавиться.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
29.08.2013, 13:16
Цитата Сообщение от dondublon Посмотреть сообщение
Это типа функциональный стиль
это два прохода вместо одного
если не понимаешь разницу, представь, что там миллион элементов
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
29.08.2013, 13:27
Вот, если кому интересно, чисто функциональное решение:
Python
1
2
3
4
5
6
mylist = [3, 5, 1, 1, 1, 1, 1, 1, 1, 1, 2, 5, 5, 5, 5, 5]
keys = set(mylist)
frequency = dict([(k, len(filter(lambda x: x == k, mylist))) for k in keys])
print frequency
mymax = max([(k,v) for k,v in frequency.iteritems()], key = lambda x:x[1])[0]
print mymax
Чисто из спортивного интереса.
Переменных по смыслу тут нет. И keys, и frequency не меняются и, следовательно, могут быть подставлены в использующие их выражения.

Добавлено через 40 секунд
Цитата Сообщение от accept Посмотреть сообщение
это два прохода вместо одного
если не понимаешь разницу, представь, что там миллион элементов
Я понимаю. Понятно, что императив быстрее. Но там, где нужна скорость, на питоне не пишут
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
29.08.2013, 13:27
Цитата Сообщение от dondublon Посмотреть сообщение
Понятно, что императив быстрее.
не императив, а однопроходной алгоритм
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
29.08.2013, 13:31
Цитата Сообщение от accept Посмотреть сообщение
не императив, а однопроходной алгоритм
Не вижу противоречия
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
31.08.2013, 18:57
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
>>> import timeit
>>> import collections
>>> 
>>> def f1(lst):
...     elems = {}
...     e, em = None, 0
...     for i in lst:
...         elems[i] = t = elems.get(i, 0) + 1
...         if t > em:
...             e, em = i, t
...     return e
... 
>>> def f2(lst):
...     frequency = {}
...     for x in lst:
...         frequency[x] = frequency.get(x, 0)+1
...     return max([(k,v) for k,v in frequency.items()], key = lambda x:x[1])[0]
... 
>>> def f3(lst):
...     return collections.Counter(lst).most_common(1)[0][0]
... 
>>> t1 = timeit.Timer('f1([3, 5, 1, 2, 5])', 'from __main__ import f1')
>>> t2 = timeit.Timer('f2([3, 5, 1, 2, 5])', 'from __main__ import f2')
>>> t3 = timeit.Timer('f3([3, 5, 1, 2, 5])', 'from __main__ import f3')
>>> t1.repeat(3)
[2.0534028900000294, 2.069512689000021, 2.0679963759999964]
>>> t2.repeat(3)
[5.193368679000059, 5.286952303000021, 5.156681644999935]
>>> t3.repeat(3)
[18.053162295999982, 18.012273875000005, 18.20183160700003]
>>>
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
31.08.2013, 20:46
accept, не стоило так стараться, я же сразу признал, что императивный код быстрее.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
31.08.2013, 20:51
Цитата Сообщение от dondublon Посмотреть сообщение
не стоило так стараться, я же сразу признал
это вообще сравнение способов
0
Эксперт Python
 Аватар для dondublon
4652 / 2072 / 366
Регистрация: 17.03.2012
Сообщений: 10,182
Записей в блоге: 6
31.08.2013, 21:15
Если бы стояла задача сделать это быстро, то я бы сделал две вещи.
1. Поскольку бутылочное горлышко тут, очевидно, поиск в словаре, подумал насчет замены словаря на список или массив. Исходя из диапазона чисел, но, думаю, можно было бы сделать.
2. Ну и конечно, использовал бы numpy, в частности, функцию unique.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
31.08.2013, 22:44
Цитата Сообщение от dondublon Посмотреть сообщение
1. Поскольку бутылочное горлышко тут, очевидно, поиск в словаре, подумал насчет замены словаря на список или массив.
вообще-то, поиск в словаре - O(1)

Цитата Сообщение от dondublon Посмотреть сообщение
2. Ну и конечно, использовал бы numpy
если он установлен
скрипт может попасть туда, где нет numpy
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
31.08.2013, 22:44
Помогаю со студенческими работами здесь

Определите, с какого слова чаще всего начинаются предложения в тексте, а также которым чаще всего заканчиваются
Определите, с какого слова чаще всего начинаются предложения в тексте, а также которым чаще всего заканчиваются.

Вывести число, которое встречается в списке чаще всего
Помогите, пожалуйста, решить задачи. Сижу уже 5-й час и не могу решить. Условие задачи Нужно реализовать функцию, принимающую...

Найти в строке слово, встречающееся чаще всего
Задача найти в строке слово ,встречающееся чаще всего. Ввожу строку ,делю её на слова и их в массив слов. Вопрос собственное как потом...

Найти чаще всего встречающееся в массиве значение
Генерировать случайный массив(int) размерности 2000, элементы массива принимают значения (1..5+3). Найти чаще всего встречающееся значение.

Найти слово, встречающееся чаще всего в данном текстовом файле
Парни нужна помощь, задали задачку на сдачу, а я не шарю как сделать: Есть файл с текстом. Найти слово, встречающееся чаще всего в данном...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru