Как посчитать количество уникальных элементов в списке python
Перейти к содержимому

Как посчитать количество уникальных элементов в списке python

  • автор:

Посчитать количество уникальных элементов в списке?

У меня есть список, к примеру [0, 1, 1, 3, -1, 3] . Результат должен быть «4». Не понимаю, как это реализовать, возможно есть какая-то функция?

Отслеживать
24.8k 4 4 золотых знака 20 20 серебряных знаков 36 36 бронзовых знаков
задан 20 дек 2020 в 18:27
33 1 1 серебряный знак 6 6 бронзовых знаков
Возможно, стоит уже учить язык и начать читать про базовые типы данных?
20 дек 2020 в 18:33

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

lst = [0, 1, 1, 3, -1, 3] print(len(set(lst)) 

В принципе, это можно и вручную сделать через словарь, но есть готовый тип данных для хранения уникальных элементов set (множество).

Отслеживать
ответ дан 20 дек 2020 в 18:31
67.7k 5 5 золотых знаков 20 20 серебряных знаков 51 51 бронзовый знак

arr = [0, 1, 1, 3, -1, 3] 
print(len(set(arr))) 
arr2 = [] for i in arr: if i not in arr2: arr2.append(i) print(len(arr2)) 
print(len([i for i in enumerate(sorted(arr)) if i[0] == 0 or i[1] != sorted(arr)[i[0] - 1]])) 
print(len([i for i in zip(sorted(arr), sorted(arr)[1:] + [sorted(arr)[0]]) if i[0] != i[1]])) 
print(len([i for i in range(len(arr)) if min(sorted(arr)[i:]) != min(sorted(arr)[i - 1:])])) 
print(len([i for i in range(len(arr)) if arr[i] not in arr[i + 1:]])) 
print(len([i for i in range(len(arr)) if arr[i:].count(arr[i]) == 1])) 
  • хватит разврата. и откопал стюардессу

Отслеживать
ответ дан 20 дек 2020 в 18:43
37.1k 4 4 золотых знака 26 26 серебряных знаков 69 69 бронзовых знаков
Только надо всё же упомянуть, что для больших списков всё кроме множества будет работать медленно )
21 дек 2020 в 8:40

это да, но вот интересный вопрос — если диапазон значений огромный в списке, чтоб нельзя было O(1) устроить, то есть ли способ подсчитать кол-во уникальных значений быстрее, чем чем через set

21 дек 2020 в 8:45

print(sum(arr[i] not in arr[:i]for i in range(len(arr)))) print(len()) print(len()) print(len()) 

Отслеживать
ответ дан 20 дек 2020 в 18:59
19.5k 5 5 золотых знаков 22 22 серебряных знака 56 56 бронзовых знаков

Корректное решение требует определённых усилий. Первое что нужно — функция которая умеет считать длину генератора. Так как мы оптимизируем решение по памяти, то len(list(. )) не подходит. Вот одно из из самых простых и ясных решений:

def count(a): return max(enumerate(a, 1), default=(0, None))[0] 

Сосчитаем одинаковые соседние элементы в списке. На этот раз нам не нужно экономить память так как на входе у нас список (или кортеж, или строка — решение достаточно универсальное):

def n_duplicates(a): return count(None for a, b in zip(a[:-1], a[1:]) if a == b) 

К сожалению, исходный список может иметь несоседние одинаковые элементы. Очевидно, их можно сделать соседними с помощью перестановки. Хотя мы не знаем какая именно перестановка нам нужна, мы точно знаем что это перестановка. Переберём перестановки, нам нужна та где количество дубликатов самое большое. Этот максимум вычтем из длины исходного массива:

def n_uniques(a): return len(a) - max(n_duplicates(b) for b in itertools.permutations(a)) 

Решение достаточно изящно и отлично работает:

@>>> print(n_uniques([0, 1, 1, 3, -1, 3])) 4 

Как подсчитать уникальные значения в массиве NumPy (3 примера)

Вы можете использовать следующие методы для подсчета уникальных значений в массиве NumPy:

Способ 1: отображение уникальных значений

np.unique (my_array) 

Метод 2: подсчет количества уникальных значений

len (np.unique (my_array)) 

Способ 3: подсчет вхождений каждого уникального значения

np.unique (my_array, return_counts= True ) 

В следующих примерах показано, как использовать каждый метод на практике со следующим массивом NumPy:

import numpy as np #create NumPy array my_array = np.array([1, 3, 3, 4, 4, 7, 8, 8]) 

Пример 1: отображение уникальных значений

Следующий код показывает, как отобразить уникальные значения в массиве NumPy:

#display unique values np.unique (my_array) array([1, 3, 4, 7, 8]) 

На выходе мы видим каждое из уникальных значений в массиве NumPy: 1, 3, 4, 7, 8.

Пример 2. Подсчет количества уникальных значений

В следующем коде показано, как подсчитать общее количество уникальных значений в массиве NumPy:

#display total number of unique values len (np.unique (my_array)) 5 

Из вывода мы видим, что в массиве NumPy есть 5 уникальных значений.

Пример 3. Подсчет вхождений каждого уникального значения

В следующем коде показано, как подсчитать количество вхождений каждого уникального значения в массиве NumPy:

#count occurrences of each unique value np.unique (my_array, return_counts= True ) (array([1, 3, 4, 7, 8]), array([1, 2, 2, 1, 2])) 

Первый массив в выходных данных показывает уникальные значения, а второй массив показывает количество каждого уникального значения.

Мы можем использовать следующий код для вывода этого вывода в более удобном для чтения формате:

#get unique values and counts of each value unique, counts = np.unique (my_array, return_counts= True ) #display unique values and counts side by side print(np.asarray ((unique, counts)). T ) [[1 1] [3 2] [4 2] [7 1] [8 2]] 

Из вывода мы видим:

  • Значение 1 встречается 1 раз.
  • Значение 3 встречается 2 раза.
  • Значение 4 встречается 2 раза.
  • Значение 7 встречается 1 раз.
  • Значение 8 встречается 2 раза.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в Python:

Как подсчитать уникальные значения в Pandas (с примерами)

Вы можете использовать функцию nunique() для подсчета количества уникальных значений в кадре данных pandas.

Эта функция использует следующий базовый синтаксис:

#count unique values in each column df.nunique () #count unique values in each row df.nunique (axis= 1 ) 

В следующих примерах показано, как использовать эту функцию на практике со следующими пандами DataFrame:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df team points assists rebounds 0 A 8 5 11 1 A 8 8 8 2 A 13 7 11 3 A 13 9 6 4 B 22 12 6 5 B 22 9 5 6 B 25 9 9 7 B 29 4 12 

Пример 1. Подсчет уникальных значений в каждом столбце

Следующий код показывает, как подсчитать количество уникальных значений в каждом столбце DataFrame:

#count unique values in each column df.nunique () team 2 points 5 assists 5 rebounds 6 dtype: int64 

Из вывода мы видим:

  • Столбец «команда» имеет 2 уникальных значения.
  • Столбец «баллы» имеет 5 уникальных значений.
  • Столбец «Помощь» имеет 5 уникальных значений.
  • Столбец «Подборы» имеет 6 уникальных значений.

Пример 2. Подсчет уникальных значений в каждой строке

В следующем коде показано, как подсчитать количество уникальных значений в каждой строке DataFrame:

#count unique values in each row df.nunique (axis= 1 ) 0 4 1 2 2 4 3 4 4 4 5 4 6 3 7 4 dtype: int64 

Из вывода мы видим:

  • Первая строка имеет 4 уникальных значения
  • Вторая строка имеет 2 уникальных значения
  • Третья строка имеет 4 уникальных значения

Пример 3. Подсчет уникальных значений по группам

В следующем коде показано, как подсчитать количество уникальных значений по группам в DataFrame:

#count unique 'points' values, grouped by team df.groupby('team')['points']. nunique () team A 2 B 3 Name: points, dtype: int64 

Из вывода мы видим:

  • Команда «А» имеет 2 уникальных значения «очков».
  • Команда «Б» имеет 3 уникальных значения «очков».

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные операции в pandas:

Изучаем Python: поиск в списке

В этой статье мы рассмотрим три способа получения уникальных значений из списка Python .

Способы получения уникальных значений из списка в Python

Уникальные значения из списка можно извлечь с помощью:

  • Метода Python set().
  • Метода list.append() вместе с циклом for.
  • Метода numpy.unique().

1. Set()

  • Сначала нужно преобразовать список в набор с помощью функции set().
set(input_list_name)

Поскольку список преобразуется в набор, в него помещается только одна копия всех элементов.

  • Затем преобразуем набор обратно в список, используя следующую команду:
list(set-name)
  • Выводим новый список.
list_inp = [100, 75, 100, 20, 75, 12, 75, 25] set_res = set(list_inp) print("The unique elements of the input list using set():n") list_res = (list(set_res)) for item in list_res: print(item)
The unique elements of the input list using set(): 25 75 100 20 12

2. Python list.append() и цикл for

Чтобы найти уникальные элементы, используем цикл for вместе с функцией list.append().

  • Создадим новый список res_list.
  • С помощью цикла for проверяем наличие определенного элемента в созданном списке (res_list). Если элемент отсутствует, он добавляется в новый список с помощью метода append().
list.append(value)

Если во время переборки мы сталкиваемся с элементом, который уже существует в новом списке, то он игнорируется циклом for. Используем оператор if, чтобы проверить, является ли элемент уникальным или копией.

list_inp = [100, 75, 100, 20, 75, 12, 75, 25] res_list = [] for item in list_inp: if item not in res_list: res_list.append(item) print("Unique elements of the list using append():n") for item in res_list: print(item)
Unique elements of the list using append(): 100 75 20 12 25

3. Метод numpy.unique() для создания списка с уникальными элементами

Модуль Python NumPy включает в себя встроенную функцию numpy.unique, предназначенную для извлечения уникальных элементов из массива.

  • Сначала преобразуем список в массив NumPy, используя приведенную ниже команду.
numpy.array(list-name)

Далее используем метод numpy.unique() для извлечения уникальных элементов данных из массива numpy.

  • Выводим на экран полученный список.
numpy.unique(numpy-array-name)
import numpy as N list_inp = [100, 75, 100, 20, 75, 12, 75, 25] res = N.array(list_inp) unique_res = N.unique(res) print("Unique elements of the list using numpy.unique():n") print(unique_res)
Unique elements of the list using numpy.unique(): [12 20 25 75 100]

Заключение

В этой статье мы рассмотрели три способа извлечения уникальных значений из списка Python.

Вадим Дворников автор-переводчик статьи « Get Unique Values From a List in Python »

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *