Учитывая список элементов, напомним, что режим списка - это элемент, который встречается наиболее часто.
Я хотел бы знать, как создать функцию, которая может найти режим списка, но которая отображает сообщение, если в списке нет режима (например, все элементы в списке появляются только один раз). Я хочу сделать эту функцию без импорта каких-либо функций. Я пытаюсь создать свою функцию с нуля.
assert(mode[1, 1, 1]) == None
иassert(mode[1, 2, 3, 4]) == None
. Чтобы число было amode
, оно должно встречаться чаще, чем хотя бы одно другое число в списке, и оно не должно быть единственным числом в списке.Ответы:
Вы можете использовать
max
функцию и клавишу. Взгляните на функцию python max, используя «ключ» и лямбда-выражение .источник
O(n**2)
. Является ли?max(lst, key=lst.count)
. (И я бы действительно не стал называть списокlist
.)a = [22, 33, 11, 22, 11]; print(max(set(a), key=a.count))
возвращается11
. Всегда ли будет возвращать минимальный режим? И если да, то почему?Вы можете использовать
Counter
поставляемый вcollections
пакете сmode
функцией -esqueПримечание. Счетчик является новым в python 2.7 и недоступен в более ранних версиях.
источник
Counter(your_list_in_here).most_common(1)[0][0]
. Если существует более одного режима, возвращается произвольный.n
самые обычныеmodes
. Если Counter (your_list_in_here) .most_common (1) [0] [0] предоставит вам первый режим, как вы получите другой, наиболее распространенный режимmode
? Просто замените последнее0
на1
? Можно сделать функцию настройкиmode
по своему вкусу ..Python 3.4 включает этот метод
statistics.mode
, поэтому он прост:В списке могут быть элементы любого типа, а не только числовые:
источник
multimode
, который возвращает несколько режимов, если их больше одного.Взяв лист из некоторого статистического программного обеспечения, а именно SciPy и MATLAB , они просто возвращают наименьшее наиболее распространенное значение, поэтому, если два значения встречаются одинаково часто, возвращается наименьшее из них. Надеюсь, вам поможет пример:
Есть ли причина, по которой вы не можете следовать этому соглашению?
источник
Есть много простых способов найти режим списка в Python, например:
Или вы можете найти максимум по его количеству
Проблема с этими двумя методами в том, что они не работают с несколькими режимами. Первый возвращает ошибку, а второй возвращает первый режим.
Чтобы найти режимы набора, вы можете использовать эту функцию:
источник
Расширение ответа сообщества, которое не будет работать, когда список пуст, вот рабочий код для режима:
источник
Если вас интересует самый маленький, самый большой или все режимы:
источник
Я написал эту удобную функцию для поиска режима.
источник
Коротко, но как-то некрасиво:
Используя словарь, чуть менее некрасиво:
источник
Немного длиннее, но может иметь несколько режимов и может получать строку с большинством подсчетов или сочетанием типов данных.
источник
Чтобы число было a
mode
, оно должно встречаться больше раз, чем хотя бы одно другое число в списке, и оно не должно быть единственным числом в списке. Итак, я реорганизовал ответ @mathwizurd (чтобы использоватьdifference
метод) следующим образом:Эти тесты проходят успешно:
источник
Почему не просто
У него нет нескольких проверок ошибок, которые он должен иметь, но он найдет режим без импорта каких-либо функций и напечатает сообщение, если все значения появятся только один раз. Он также обнаружит несколько элементов с одинаковым максимальным количеством, хотя было неясно, нужно ли вам это.
источник
Эта функция возвращает режим или режимы функции независимо от их количества, а также частоту режима или режимов в наборе данных. Если режима нет (т. Е. Все элементы встречаются только один раз), функция возвращает строку ошибки. Это похоже на функцию A_nagpal, описанную выше, но, по моему скромному мнению, она более полная, и я думаю, что ее легче понять любым новичкам в Python (например, вашим искренним), читающим этот вопрос, чтобы понять.
источник
return 'There is no mode for this data set. All values occur only once.'
может быть преобразована в сообщение об ошибке сtraceback
условием «if: следующая строка с отступом» поднять значение ValueError («Для этого набора данных нет режима. Все значения встречаются только один раз»). Вот список различных типов ошибки вы можете поднять.Это вернет все режимы:
источник
Простой код, который находит режим списка без импорта:
В случае нескольких режимов он должен возвращать минимальный узел.
источник
источник
источник
Вот простая функция, которая получает первый режим, который встречается в списке. Он создает словарь с элементами списка в качестве ключей и количества вхождений, а затем считывает значения dict, чтобы получить режим.
источник
Если вам нужен четкий подход, полезный для класса и использующий только списки и словари для понимания, вы можете:
источник
источник
Вот как вы можете найти среднее значение, медианное значение и режим списка:
источник
источник
Для тех, кто ищет минимальный режим, например: случай бимодального распределения с использованием numpy.
источник
Режим набора данных - это элемент (ы), который (а) наиболее часто встречается в наборе. Если два члена появляются чаще всего с одинаковым количеством раз, то данные имеют два режима. Это называется бимодальным .
Если имеется более двух режимов, данные будут называться мультимодальными . Если все элементы в наборе данных появляются одинаковое количество раз, то набор данных вообще не имеет режима .Следующая функция
modes()
может работать для поиска режима (ов) в заданном списке данных:Вывод:
Если мы не хотим импортировать
numpy
илиpandas
вызывать какую-либо функцию из этих пакетов, то для получения такого же выводаmodes()
функцию можно записать как:источник