Посчитать количество уникальных элементов в списке?
У меня есть список, к примеру [0, 1, 1, 3, -1, 3] . Результат должен быть "4". Не понимаю, как это реализовать, возможно есть какая-то функция?
![]()
В принципе, это можно и вручную сделать через словарь, но есть готовый тип данных для хранения уникальных элементов set (множество).
- хватит разврата. и откопал стюардессу
![]()
![]()
Корректное решение требует определённых усилий. Первое что нужно — функция которая умеет считать длину генератора. Так как мы оптимизируем решение по памяти, то len(list(. )) не подходит. Вот одно из из самых простых и ясных решений:
Сосчитаем одинаковые соседние элементы в списке. На этот раз нам не нужно экономить память так как на входе у нас список (или кортеж, или строка — решение достаточно универсальное):
К сожалению, исходный список может иметь несоседние одинаковые элементы. Очевидно, их можно сделать соседними с помощью перестановки. Хотя мы не знаем какая именно перестановка нам нужна, мы точно знаем что это перестановка. Переберём перестановки, нам нужна та где количество дубликатов самое большое. Этот максимум вычтем из длины исходного массива:
Python: Count Unique Values in a List (4 Ways)

In this tutorial, you’ll learn how to use Python to count unique values in a list. You’ll also learn what the fastest way to do this is! You’ll learn how to accomplish this using a naive, brute-force method, the collections module, using the set() function, as well as using numpy . We’ll close off the tutorial by exploring which of these methods is the fastest to make sure you’re getting the best performance out of your script.
The Quick Answer: Use Python Sets
Table of Contents
Why count unique values?
Python lists are a useful built-in data structure! One of the perks that they offer is the ability to have duplicate items within them.
There may be many times when you may to count unique values contained within a list. For example, if you receive data in a list that tracks the number of log in into a site, you could determine how many unique people actually logged in.
Using Collections to Count Unique Values in a List
The built-in collections module can be used to count unique values in a list. The module has a built-in object called Counter that returns a dictionary-like object with the unique values as keys and the number of occurrences for values.
Because of this, we can counts the number of keys to count the number of unique values.
Tip! Want to learn more about the Python collections module and its Counter class? Check out my in-depth tutorial here, where you’ll learn how to count occurrences of a substring in a string.
Let’s see how we can use the Counter object to count unique values in a Python list:
Let’s see what we’ve done here:
- We passed our list into the Counter object to create a unique object
- We get the keys using the .keys() attribute
- Finally, we get the length of that new object
We can make this much easier to write by simply chaining the process together, as shown below.
This process returns the same thing, but is much quicker to write!
Using Sets to Count Unique Values in a Python List
Another built-in data structure from Python are sets. One of the things that separate sets from lists is that they can only contain unique values.
Python comes built with a set() function that lets you create a set based on something being passed into the function as a parameter. When we pass a list into the function, it turns the list into a set, thereby stripping out duplicate values.
Now, let’s see how we can use sets to count unique values in a list:
What we’ve done here is:
- Turned our list into a set using the built-in set() function
- Returned the number of values by counting the length of the set, using the len() function
We can also make this process a little faster by simply chaining our methods together, as demonstrated below:
This returns the same value but is a little faster to write out.
Want to learn more? Learn four different ways to append to a list in Python using this extensive tutorial here.
Use Numpy to Count Unique Values in a Python List
You can also use numpy to count unique values in a list. Numpy uses a data structure called a numpy array, which behaves similar to a list but also has many other helpful methods associated with it, such as the ability to remove duplicates.
Let’s see how we can use numpy to count unique values in a list:
Let’s see what we’ve done here:
- We imported numpy as np and created an array using the array() function
- We used the unique() function from numpy to remove any duplicates
- Finally, we calculated the length of that array
We can also write this out in a much faster way, using method chaining. Let’s see how this can be done:
This returns the same result as before.
Use a For Loop in Python to Count Unique Values in a List
Finally, let’s take a look at a more naive method to count unique items in a list. For this, we’ll use a Python for loop to iterate over a list and count its unique items.
Let’s see what we’ve done here:
- We create a new list called unique_list and an integer of 0 called unique_items
- We then loop over our original list and see if the current item is in the unique_list
- If it isn’t, then we append it to the list and add 1 to our counter unique_items
What Method is Fastest to Count Unique Values in a Python List?
Now that you’ve learned four unique ways of counting unique values in a Python list, let’s take a look at which method is fastest.
What we’ll do is create a Python decorator to time each method. We’ll create a function that executes each method and decorate it to identify how long its execution takes.
For out sample list, we’ll use the first few paragraphs of A Christmas Carol, where each word is a list, and multiply that list by 10,000 to make it a bit of a challenge:
From this, we can see that while the Counter method and the Numpy methods are reasonably fast, the set method is the fastest of the bunch! This could be attributed to the fact that it doesn’t require the import of another method.
Conclusion
In this post, you learned how to count unique values in a Python list. You learned how to do this using built-in sets, using the collections module, using numpy , and finally using a for-loop. You then learned which of these methods is the fastest method to execute, to ensure you’re not bogging down your script unnecessarily.
To learn more about the Counter object in the collections module, you can check out the official documentation here.
6 Способов в Python подсчитать уникальные значения в списке
Значения, которые появляются в списке только один раз, являются уникальными. Мы обсудим различные методы подсчета уникальных значений python в списке.
- Автор записи
Вступление
В Python у нас есть дубликаты элементов, присутствующих в списке. Иногда мы сталкиваемся с ситуацией, когда нам нужно подсчитать уникальные значения в списке в Python. Поэтому мы будем обсуждать различные способы поиска уникальных значений в массиве или списке. А также выведите количество уникальных элементов, присутствующих в списке.
Уникальный элемент Python в списке
Уникальные элементы-это элементы, которые появляются только один раз в списке .
Предположим, у нас есть список = [1, 2, 3, 2, 3, 5, 1, 6, 1]. Здесь мы видим, что 1 приходит 3 раза, 2 приходит 2 раза, 3 приходит 2 раза, 5 и 6 приходят один раз. Если мы посчитаем уникальные элементы в списке, то их будет всего 5.[1, 2, 3, 5, 6].
Различные методы подсчета уникальных значений
Давайте разберемся во всех различных методах, с помощью которых мы можем вычислить количество уникальных элементов в списке или массиве с помощью примеров:
1. Python Подсчитывает уникальные значения в списке обычным методом грубой силы
Мы называем этот метод подходом грубой силы . Этот метод не так эффективен, так как в нем больше времени и больше пространства. Этот подход будет принимать пустой список и переменную count, которая будет установлена в 0. мы пройдем от начала до конца и проверим, нет ли этого значения в пустом списке. Затем мы добавим его и увеличим переменную count на 1. Если его нет в пустом списке, то мы не будем его считать, не будем добавлять в пустой список.
Здесь, во-первых, мы взяли входной список и напечатали входной список. Во-вторых, мы взяли пустой список и переменную count, которая установлена в 0. В-третьих, мы прошли список с самого начала и проверили, нет ли значения в пустом списке или нет. Если значение отсутствует в пустом списке, мы увеличиваем значение счетчика на 1 и добавляем это значение в пустой список. Если мы обнаруживаем, что элементы присутствуют в списке, мы не добавляем их в пустой список и не увеличиваем значение счетчика на 1. Наконец, мы напечатали пустой список, который теперь содержит уникальные значения и количество списка. Таким образом, мы можем видеть все уникальные элементы в списке.
2. С помощью счетчика
В этом методе мы будем использовать функцию счетчика из библиотеки коллекций. В этом случае мы будем создавать словарь с помощью функции counter (). Ключи будут уникальными элементами, а значения-числом этого уникального элемента. Взяв ключи из словаря, мы создадим список и напечатаем длину списка.
Выход:
Здесь, во-первых, мы импортировали функцию Counter() из библиотеки коллекций. Во-вторых, мы взяли входной список и напечатали входной список. В-третьих, мы применили счетчик(), неупорядоченную коллекцию, где элементы хранятся как ключи словаря, а их подсчеты хранятся как значения словаря. Из входного списка мы создали новый список, в котором хранятся только те элементы, ключевые значения которых присутствуют один раз. Все эти элементы различны в списке. Наконец, мы напечатали пустой список, который теперь содержит уникальные значения и количество списка. Таким образом, мы можем видеть все уникальные элементы в списке.
3. Python Подсчитывает Уникальные Значения В Списке С помощью набора
В этом методе мы будем использовать встроенный тип данных python, называемый Set. Мы возьмем входные данные в виде списка, а затем преобразуем их в набор. Как мы все знаем, набор не содержит в себе никаких повторяющихся элементов. Он будет содержать только уникальные элементы, и мы выведем длину списка с помощью функции length ().
Здесь, во-первых, мы взяли входной список и напечатали входной список. Во-вторых, мы преобразовали входной список в набор. Set, который является встроенным типом данных в python, содержит только уникальные элементы в нем. В-третьих, мы сохранили все значения в другом списке. Наконец, мы напечатали пустой список, который теперь содержит уникальные значения и количество списка. Таким образом, мы можем видеть все уникальные элементы в списке.
4. С помощью numpy.unique
В этом методе мы импортируем библиотеку numpy с ее псевдонимом np. В библиотеке numpy мы будем использовать функцию numpy.unique (), которая возвращает уникальное значение входного списка. Мы также можем вернуть количество каждого уникального значения, если параметр return count имеет значение True.
Здесь, во-первых, мы импортировали модуль numpy в качестве псевдонима np. Во-вторых, мы взяли входной список и напечатали входной список. В-третьих, мы применили numpy. unique (), который сохранит только уникальные значения списка и сохранит их в другом списке. Наконец, мы напечатали пустой список, который теперь содержит уникальные значения и количество списка. Таким образом, мы можем видеть все уникальные элементы в списке.
5. Python Подсчитывает Уникальные Значения В Списке С Помощью Функции pandas dict + zip
В этом методе мы будем использовать словарь с комбинацией функций zip для поиска уникальных значений строки путем преобразования их в список.
Здесь во-первых, мы взяли строку как. Во-вторых, мы применили функцию dict внутри того, что мы применили функцию zip, и внутри нее мы преобразовали строку в список и подсчитали ключи и значения, пройдя по списку. В-третьих, мы взяли переменную unique, в которой мы хранили ключи и значения словаря. Наконец, мы напечатали длину словаря с помощью функции length в python.
6. Использование фрейма данных pandas.
В этом методе мы будем импортировать панд в качестве псевдонима pd. мы будем принимать входные данные в кадре данных панд.
Здесь, во-первых, мы импортировали модуль панд с псевдонимом pd. Во – вторых, мы создали фрейм данных с вводом меток и имен. В-третьих, мы создали переменную n, в которой будем хранить значение. Мы применили уникальную функцию в метках в панд, а затем вычислили ее длину с помощью функции длины и сохранили ее в переменной n. Наконец-то мы напечатали результат.
Кроме того, Читайте
- Numpy Count | Практическое объяснение поиска вхождений
- 4 Надежных Способа Подсчета Слов в строке в Python
- 5 Лучших способов найти длину строки Python
- Использование панд в CSV() с совершенством
- Сложение матриц в Python | Сложение двух матриц
Вывод
В этом уроке мы увидели, что представляют собой уникальные элементы в списке. Кроме того, мы видели различные методы, с помощью которых мы можем найти уникальные элементы в списке. Мы также подсчитали уникальные элементы в списке и напечатали их количество. Все методы подробно объясняются с помощью примеров. Все примеры также объясняются, что даст вам лучшее понимание методов. Вы можете использовать любую из программ, чтобы найти количество уникальных элементов в списке в соответствии с вашими потребностями и выбором.
Rukovodstvo
статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
Python: получить количество элементов в списке
Введение Получение количества элементов в списке в Python — обычная операция. Например, вам нужно будет знать, сколько элементов в списке, когда вы его просматриваете. Помните, что списки могут содержать комбинацию целых чисел, чисел с плавающей запятой, строк, логических значений, других списков и т. Д. В качестве своих элементов: # Список только целых чисел list_a = [12, 5, 91, 18] # Список целых чисел, чисел с плавающей запятой, строк, логические list_b = [4, 1.2, "hello world", True] Если мы посчитаем элементы в list_a, мы получим 5 элементов ov
Время чтения: 6 мин.
Вступление
Получение количества элементов в списке в Python — обычная операция. Например, вам нужно будет знать, сколько элементов в списке, когда вы его просматриваете. Помните, что списки могут иметь комбинацию целых чисел, чисел с плавающей запятой, строк, логических значений, других списков и т. Д. В качестве своих элементов:
Если мы посчитаем элементы в list_a мы получим всего 5 элементов. Если мы сделаем то же самое для list_b мы получим 4 элемента.
Есть разные способы узнать количество элементов в списке. Подходы различаются, хотите ли вы подсчитывать вложенные списки как один элемент или все элементы во вложенных списках, или если вас интересуют только уникальные элементы и т. Д.
Встроенная функция len ()
Самый простой способ узнать количество элементов в списке — использовать встроенную в Python функцию len() .
Давайте посмотрим на следующий пример:
Как следует из названия функции, len() возвращает длину списка, независимо от типов элементов в нем.
Использование цикла for
Другой способ сделать это — создать функцию, которая просматривает список с помощью цикла for Сначала мы инициализируем счетчик элементов равным 0, и каждый раз, когда выполняется итерация цикла, счет увеличивается на 1.
Цикл заканчивается, когда он перебирает все элементы, поэтому счетчик будет представлять общее количество элементов в списке:
Запуск этого кода напечатает:
Это гораздо более подробное решение по сравнению с len() , но его стоит рассмотреть, поскольку позже в статье мы увидим, что ту же идею можно применить, когда мы имеем дело со списком списков. Кроме того, вы можете захотеть выполнить некоторые операции либо с самими элементами, либо с операцией в целом, что здесь возможно.
Получить количество уникальных элементов в списке
Списки могут состоять из нескольких элементов, включая дубликаты. Если мы хотим получить количество элементов без дубликатов (уникальных элементов), мы можем использовать другую встроенную функцию set() . Эта функция создает set , который отклоняет все повторяющиеся значения.
Затем мы передаем это в len() чтобы получить количество элементов в set :
Мы видим, что list_d имеет всего 8 элементов, 5 из которых уникальны.
Список списков с использованием len ()
Во введении мы увидели, что элементы списков могут иметь разные типы данных. Однако списки, в свою очередь, могут иметь списки в качестве своих элементов. Например:
Если мы используем встроенную функцию len() , списки считаются отдельными элементами, поэтому у нас будет:
Обратите внимание, что пустой список считается одним элементом. Если список в списке содержит более одного элемента, они не принимаются во внимание. Здесь пригодится цикл for
Получить количество элементов в списке, содержащем другие списки
Если мы хотим подсчитать все элементы внутри списка, содержащего другие списки, мы можем использовать цикл for Мы можем инициализировать count до 0 и пройти по списку. На каждой итерации цикла count увеличивается на длину этого списка.
Мы будем использовать встроенную функцию len() чтобы получить длину:
В этом примере следует отметить несколько важных моментов. Во-первых, на этот раз пустой список не повлиял на общий счет. Это связано с тем, что в каждом цикле мы учитываем длину текущего вложенного списка, а поскольку длина пустого списка равна 0, count увеличивается на 0.
Однако вы можете видеть, что каждый символ строки "char" учитывается в общем количестве элементов. Это связано с тем, что len() воздействует на строку, возвращая все ее символы. Мы можем избежать этой ситуации, используя тот же подход, что и в разделе ниже, который также позволит нам иметь элементы, отличные от списков.
Еще один интересный способ сделать то же самое, что и в предыдущем примере, — использовать понимание списка:
Эта строка, по сути, делает две вещи. Во-первых, он создает новый список, содержащий длины всех элементов исходного списка. В нашем случае это будет [4, 0, 3, 2, 4, 3] . Во-вторых, он вызывает sum() используя вновь созданный список в качестве параметра, который возвращает общую сумму всех элементов, давая нам желаемый результат.
Вложенные списки
Вложенные списки — это списки, которые являются элементами других списков. Списки могут быть нескольких уровней внутри друг друга:
Мы видим, что ["a", "b"] содержится в списке [8, 56, 22, ["a", "b"]] , который, в свою очередь, содержится в основном списке [30, 0.9,[200, 3, [5, [89], 10]]] .
Опять же, мы инициализируем count равной 0. Если мы хотим получить общее количество элементов во вложенном списке, нам сначала нужно проверить, является ли элемент списком или нет. Если это так, мы зацикливаемся внутри списка и рекурсивно вызываем функцию, пока не останутся вложенные списки. Все элементы, кроме списков (целые числа, строки и т. Д.), Увеличивают счетчик на 1.
Обратите внимание, что это также решение проблем, вызванных предыдущим подходом.
Давайте посмотрим на код для подсчета элементов во вложенных списках:
Запуск этого кода даст нам:
Обратите внимание, что мы использовали встроенную функцию isinstance() которая проверяет, является ли первый аргумент экземпляром класса, заданного вторым аргументом. В приведенной выше функции он проверяет, является ли элемент списком.
Первый элемент 30 является целым числом, поэтому функция переходит к else и увеличивает счетчик на 1. Когда мы добираемся до [8, 56, 22, ["a", "hello"]] , функция распознает список , и рекурсивно просматривает его, чтобы проверить наличие других списков.
Заключение
Мы увидели, что в зависимости от типа списка, который у нас есть, есть разные способы получить количество элементов. len() определенно самая быстрая и простая функция, если у нас есть плоские списки.
Для списков списков и вложенных списков len() не будет считать элементы внутри списков. Для этого нам нужно просмотреть весь список в цикле.