Посчитать количество уникальных элементов в списке?
У меня есть список, к примеру [0, 1, 1, 3, -1, 3] . Результат должен быть «4». Не понимаю, как это реализовать, возможно есть какая-то функция?
Отслеживать
25.4k 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
69.5k 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.4k 4 4 золотых знака 28 28 серебряных знаков 72 72 бронзовых знака
Только надо всё же упомянуть, что для больших списков всё кроме множества будет работать медленно )
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.6k 6 6 золотых знаков 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:
Python: получить количество элементов в списке
Получение количества элементов в списке в Python — обычная операция. Например, вам нужно будет знать, сколько элементов в списке, когда вы его просматриваете. Помните, что списки могут содержать в качестве своих элементов комбинацию целых чисел, чисел с плавающей запятой, строк, логических значений, других списков и т. д:
# List of just integers list_a = [12, 5, 91, 18] # List of integers, floats, strings, booleans list_b = [4, 1.2, "hello world", True]
Если мы посчитаем элементы list_a , мы получим всего 5 элементов. Если мы сделаем то же самое для list_b , мы получим 4 элемента.
Есть разные способы узнать количество элементов в списке. Подходы различаются, хотите ли вы считать вложенные списки как один элемент или все элементы во вложенных списках, или если вас интересуют только уникальные элементы и т.д.
Встроенная функция len()
Самый простой способ узнать количество элементов в списке — использовать встроенную Python функцию len() .
Давайте посмотрим на следующий пример:
list_a = ["Hello", 2, 15, "World", 34] number_of_elements = len(list_a) print("Number of elements in the list: ", number_of_elements)
Number of elements in the list: 5
Как следует из названия, функция len() возвращает длину списка независимо от типов элементов в нем.
Использование цикла for
Другой способ сделать это — создать функцию, которая просматривает список с помощью цикла for . Сначала мы инициализируем счетчик элементов равным 0, и каждый раз, когда выполняется итерация цикла, счет увеличивается на 1.
Цикл заканчивается, когда он перебирает все элементы, поэтому счетчик будет представлять общее количество элементов в списке:
list_c = [20, 8.9, "Hi", 0, "word", "name"] def get_number_of_elements(list): count = 0 for element in list: count += 1 return count print("Number of elements in the list: ", get_number_of_elements(list_c))
Запуск этого кода напечатает:
Number of elements in the list: 6
Это гораздо более подробное решение по сравнению с функцией len() , но его стоит рассмотреть, поскольку позже в статье мы увидим, что ту же идею можно применить, когда мы имеем дело со списком списков. Кроме того, вы можете захотеть выполнить некоторую операцию либо над самими элементами, либо с операцией в целом, что в данном случае возможно.
Получить количество уникальных элементов в списке
Списки могут состоять из нескольких элементов, включая дубликаты. Если мы хотим получить количество элементов без дубликатов (уникальных элементов), мы можем использовать другую встроенную функцию set() . Эта функция создает объект set , который отклоняет все повторяющиеся значения.
Затем мы передаем это в функцию len() , чтобы получить количество элементов в set :
list_d = [100, 3, 100, "c", 100, 7.9, "c", 15] number_of_elements = len(list_d) number_of_unique_elements = len(set(list_d)) print("Number of elements in the list: ", number_of_elements) print("Number of unique elements in the list: ", number_of_unique_elements)
Number of elements in the list: 8 Number of unique elements in the list: 5
Мы видим, что в list_d 8 элементов, 5 из которых уникальны.
Список списков с использованием len()
Во введении мы увидели, что элементы списков могут иметь разные типы данных. Однако списки, в свою очередь, могут иметь списки в качестве своих элементов. Например:
list_e = [[90, 4, 12, 2], [], [34, 45, 2], [9,4], "char", [7, 3, 19]]
Если мы используем встроенную функцию len() , списки считаются отдельными элементами, поэтому у нас будет:
number_of_elements = len(list_e) print("Number of elements in the list of lists: ", number_of_elements)
Number of elements in the list of lists: 6
Обратите внимание, что пустой список считается одним элементом. Если список в списке содержит более одного элемента, они не принимаются во внимание. Вот здесь for и пригодится.
Получить количество элементов в списке, содержащем другие списки
Если мы хотим подсчитать все элементы внутри списка, содержащего другие списки, мы можем использовать цикл for . Мы можем инициализировать переменную count= 0 и просмотреть список. На каждой итерации цикла count увеличивается на длину этого списка.
Для получения длины воспользуемся встроенной функцией len() :
list_e = [[90, 4, 12, 2], [], [34, 45, 2], [9,4], "char", [7, 3, 19]] def get_all_elements_in_list_of_lists(list): count = 0 for element in list_e: count += len(element) return count print("Total number of elements in the list of lists: ", get_all_elements_in_list_of_lists(list_e))
Total number of elements in the list of lists: 16
В этом примере следует отметить несколько важных моментов. Во-первых, на этот раз пустой список не повлиял на общий счет. Это связано с тем, что в каждом цикле мы учитываем длину текущего вложенного списка и, поскольку длина пустого списка равна 0, count увеличивается на 0.
Однако вы можете видеть, что каждый символ строки «char» учитывается в общем количестве элементов. Это связано с тем, что функция len() воздействует на строку, возвращая все ее символы. Мы можем избежать этой ситуации, используя тот же подход, что и в разделе ниже, который также позволит нам иметь элементы, отличные от списков.
Еще один интересный способ сделать то же самое, что и в предыдущем примере, — использовать определение списка:
number_of_elements = sum([len(element) for element in list_e])
Эта строка, по сути, делает две вещи. Во-первых, он создает новый список, содержащий длины всех элементов исходного списка. В нашем случае это было бы так [4, 0, 3, 2, 4, 3] . Во-вторых, он вызывает функцию sum() , используя вновь созданный список в качестве параметра, который возвращает общую сумму всех элементов, давая нам желаемый результат.
Вложенные списки
Вложенные списки — это списки, которые являются элементами других списков. Внутри списков может быть несколько уровней:
list_f = [30, 0.9, [8, 56, 22, ["a", "b"]], [200, 3, [5, [89], 10]]]
Мы видим, что [«a», «b»] содержится в списке [8, 56, 22, [«a», «b»]] , который, в свою очередь, содержится в основном списке [30, 0.9,[200, 3, [5, [89], 10]]] .
Опять же, мы инициализируем переменную count равной 0. Если мы хотим получить общее количество элементов во вложенном списке, нам сначала нужно проверить, является ли элемент списком или нет. Если это так, мы выполняем цикл внутри списка и рекурсивно вызываем функцию до тех пор, пока не останутся вложенные списки. Все элементы, кроме списков (целые числа, строки и т.д.), увеличивают счетчик на 1.
Обратите внимание, что это также решение проблем, вызванных предыдущим подходом.
Давайте посмотрим на код для подсчета элементов во вложенных списках:
list_f = [30, 0.9, [8, 56, 22, ["a", "hello"]], [200, 3, [5, [89], 10]]] def get_elements_of_nested_list(element): count = 0 if isinstance(element, list): for each_element in element: count += get_elements_nested_list(each_element) else: count += 1 return count print("Total number of elements in the nested list: ", get_elements_of_nested_list(list_f))
Запуск этого кода даст нам:
Total number of elements in the nested list: 12
Обратите внимание, что мы использовали встроенную функцию isinstance() , которая проверяет, является ли первый аргумент экземпляром класса, заданного вторым аргументом. В приведенной выше функции он проверяет, является ли элемент списком.
Первый элемент является целым числом 30 , поэтому функция переходит к блоку else и увеличивает счетчик на 1. Когда мы добираемся до [8, 56, 22, [«a», «hello»]] , функция распознает список и рекурсивно просматривает его, чтобы проверить наличие других списков.
Вывод
Мы увидели, что в зависимости от типа списка, который у нас есть, есть разные способы получить количество элементов. len() это определенно самая быстрая и простая функция, если у нас есть плоские списки.
При использовании вложенных списков элементы внутри списков не учитываются len() . Для этого нам нужно перебрать весь список.
Подсчитать количество различных элементов в списке. Python
Здесь мы используем возможности языка Python для работы со списками и множествами. Сначала мы создаем список, который содержит различные элементы. Затем мы превращаем список в множество, чтобы убрать все дубликаты и оставить только уникальные элементы. Наконец, мы используем функцию `len()` для подсчета количества элементов в множестве, что является ответом на задачу.
Переписать другими словами
Написать сочинение по запросу
Или попробуйте другие режимы нейросети.
Считать количество различных элементов в списке – задача, часто встречающаяся в программировании. Нейросеть онлайн является удобным и быстрым инструментом, который поможет справиться с этой задачей. Нейросеть пишет текст, который необходимо вставить в ваш код и на выходе вы получите ответ. Процесс решения задачи с помощью нейросети проходит быстро и точно. Теперь вместо того, чтобы много времени тратить на решение, вы можете воспользоваться нейросетью онлайн и сделать это мгновенно.
Создать текст по запросам: