У меня есть следующий список:
[0, 1, 2, 3, 4, 6, 6, 17, 16, 9, 10, 23, 12, 13, 14, 15, 16, 17, 18, 4, 20, 4, 22, 23, 24, 4, 4]
Я хотел знать, как найти число с наибольшим количеством повторений без использования цикла, так как я не считаю это очень практичным, особенно с очень длинными списками. Моя идея состояла в том, чтобы использовать словарь, элементы которого имеют элементы списка, и здесь, если вы проверите число с большим количеством повторений через for, однако это процесс, который может быть очень долгим, но может быть эффективным; и последней идеей было использовать функцию count
в цикле, который проверяет каждый элемент набора списков.
Есть ли более эффективный способ решить эту проблему? Любые идеи?
Благодарю вас!
Доброе утро, не могли бы вы попробовать это с библиотекой статистики?
С базовым Python у вас есть несколько альтернатив:
Объект
Counter()
создает список кортежей с каждым элементом и количеством вхождений, а метод [most_common()][2]
возвращает этот список, отсортированный по вхождению от самого высокого к самому низкому.Другой менее производительный, но более компактный способ записи:
Здесь мы генерируем a,
set
который является набором уникальных элементов списка, и применяем a,max()
используя метод всего спискаcount(elemento)
, который возвращает нам количествоelemento
в списке.Возможным решением является использование
Counter
:Выход:
Другой вариант — библиотека «scipy».
Преимущество: подсчитывает количество повторений числа.
Недостаток: вам нужно импортировать numpy, который является еще одним модулем.
a = [0, 1, 2, 3, 4, 6, 6, 17, 16, 9, 10, 23, 12, 13, 14, 15, 16, 17, 18, 4, 20, 4, 22, 23, 24, 4, 4]
moda, count = stats.mode(np.array(a))