Получение наименее общего элемента в массиве
Чтобы найти наиболее распространенный, я знаю, что могу использовать что-то вроде этого:
most_common = collections.Counter(array).most_common(to_find)
Однако я не могу найти ничего сопоставимого, чтобы найти наименее общий элемент.
Могу ли я получить рекомендации о том, как это сделать.
Ответы
Ответ 1
Заимствование источника collections.Counter.most_common
и инвертирование по мере необходимости:
from operator import itemgetter
import heapq
import collections
def least_common_values(array, to_find=None):
counter = collections.Counter(array)
if to_find is None:
return sorted(counter.items(), key=itemgetter(1), reverse=False)
return heapq.nsmallest(to_find, counter.items(), key=itemgetter(1))
>>> data = [1,1,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4]
>>> least_common_values(data, 2)
[(1, 2), (2, 4)]
>>> least_common_values([1,1,2,3,3])
[(2, 1), (1, 2), (3, 2)]
>>>
Ответ 2
most_common
без какого-либо аргумента возвращает все записи, упорядоченные с самого общего с наименьшим.
Итак, чтобы найти наименее распространенный, просто начните смотреть на него с другого конца.
Ответ 3
Что насчет
least_common = collections.Counter(array).most_common()[-1]
Ответ 4
def least_common_values(array, to_find):
"""
>>> least_common_values([1,1,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4], 2)
[(1, 2), (2, 4)]
"""
counts = collections.Counter(array)
return list(reversed(counts.most_common()[-to_find:]))
Ответ 5
Думаю, вам это нужно:
least_common = collections.Counter(array).most_common()[:-to_find-1:-1]
Ответ 6
Самый простой способ реализовать поиск минимума в Iterable
заключается в следующем:
Counter(your_iterable).most_common()[-1]
Это возвращает двумерный кортеж, содержащий элемент в первой позиции и количество вхождений во второй позиции.
Ответ 7
Я бы предложил следующее:
least_common = collections.Counter(array).most_common()[len(to_find)-10:len(to_find)]
Ответ 8
Вы можете использовать ключевую функцию:
>>> data=[1,1,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4]
>>> min(data,key=lambda x: data.count(x))
1
>>> max(data,key=lambda x: data.count(x))
4
Ответ 9
На основе этого ответа для большинства общих элементов: fooobar.com/questions/58522/...
Вот один лайнер для получения наименее общего элемента в списке:
def least_common(lst):
return min(set(lst), key=lst.count)
Ответ 10
Извините, опоздал к этой теме... Документы оказались весьма полезными: https://docs.python.org/3.7/library/collections.html
Выполните поиск по запросу "наименьший", и вы увидите эту таблицу, которая помогает получить больше, чем последний (-1) элемент в списке:
c.most_common()[:-n-1:-1] # n least common elements
Вот пример:
n = 50
word_freq = Count(words)
least_common = word_freq.most_common()[:-n-1:-1]