Подтвердить что ты не робот

Получение наименее общего элемента в массиве

Чтобы найти наиболее распространенный, я знаю, что могу использовать что-то вроде этого:

most_common = collections.Counter(array).most_common(to_find)

Однако я не могу найти ничего сопоставимого, чтобы найти наименее общий элемент.

Могу ли я получить рекомендации о том, как это сделать.

4b9b3361

Ответ 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]