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

Как найти количество различных элементов в массиве питон

  • автор:

Как определить число различных элементов в упорядоченном списке?

Подкиньте идею или код(в котором я буду разбираться)/ Думаю сделать это через два цикла for. Если есть более короткое решение, напишите мне. Задача:

Дан список, упорядоченный по неубыванию элементов в нем. Определите, сколько в нем различных элементов.

Отслеживать
13.8k 12 12 золотых знаков 44 44 серебряных знака 77 77 бронзовых знаков
задан 3 фев 2021 в 21:25
29 2 2 серебряных знака 4 4 бронзовых знака

Можно через сортировку, можно через set, можно и вправду двойным циклом: добавляем i-тый элемент в массив ans, если в массиве a[i] not in ans. А, если упорядоченный, то просто проверить, что данный элемент не равен предыдущему

3 фев 2021 в 21:32

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

3 фев 2021 в 21:33

3 ответа 3

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

Хватит и одного цикла: считать разницу двух соседних элементов. Если не 0, то они различные. Это если числа. Если не числа, то просто сравнивать соседние элементы.

n = len(set(spisok)) 

Отслеживать
ответ дан 3 фев 2021 в 21:28
26.7k 7 7 золотых знаков 32 32 серебряных знака 49 49 бронзовых знаков

Всё-таки если в условии подсвечено, что дан отсортированный список, то вряд ли ожидается, что это надо решать через set.

3 фев 2021 в 22:41
@Xander я потому и написал целый первый абзац
3 фев 2021 в 22:43
@Xander про сет тем не менее ограничений тоже нет
3 фев 2021 в 22:50

А вот ещё такой забавный вариант у меня получился чисто по приколу:

print(sum(x != y for x,y in zip(a, a[1:])) + bool(a)) 

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

Отслеживать
ответ дан 4 фев 2021 в 8:45
71.7k 5 5 золотых знаков 20 20 серебряных знаков 52 52 бронзовых знака

самый быстрый способ (раз упорядоченный список):

nums = [1, 2, 2, 3, 4, 5, 5, 5] count = 1 for i in range(1, len(nums)): if nums[i - 1] != nums[i]: count += 1 print(count) 

или чуть сократив код:

count = 1 for i in range(1, len(nums)): count += nums[i - 1] != nums[i] 

правда стоит сделать проверку для ситуации, когда список пустой

из той же серии (если требуется не только подсчитать кол-во элементов, но и найти эти элементы)

count = len([nums[0]] + [nums[i] for i in range(1, len(nums)) if nums[i - 1] != nums[i]]) 

Это все требует одного прохода по списку

Можно написать очень короткий код, но по времени работы для такой задачи он будет неоптимальным

count = len(set(nums)) 

Самый неоптимальный по времени работы код

nums = [1, 2, 2, 3, 4, 5, 5, 5] res = [] for elem in nums: if elem not in res: res.append(elem) print(len(res)) 

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

В питоне нету массивов. А кортежи, списки и словари есть. Бесит когда люди говорят про массивы в питоне т.к массив со своими элементами будет храниться в выделенной области памяти на компьютере, а каждый элемент списка будет храниться в разных местах памяти.

24 февраля 2022

Легко. Для этого используется функция len() . Она принимает список и возвращает количество элементов в нём.

>>> collection = [1, 2, 'hexlet'] >>> len(collection) 3 

Количество элементов в списке Python с условиями или критериями

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

Если вам просто нужно найти количество конкретных элементов с списке, используйте метод .count()

 
 
>>> list_numbers = [1, 2, 2, 5, 5, 7, 4, 2, 1] >>> print(list_numbers.count(2)) 3

Существует несколько способов такого подсчета, и мы изучим каждый из них с помощью примеров. Итак, давайте начнем.

1. Использование цикла for для подсчета в списке Python

В этом фрагменте кода мы используем цикл for для подсчета элементов списка Python, удовлетворяющих условиям или критериям. Мы перебираем каждый элемент списка и проверяем условие, если оно истинно, то мы увеличиваем счетчик на 1. Это простой процесс сопоставления и подсчета для получения интересующего нас количества.

 
 
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20] count = 0 for item in list_numbers: if item%5 == 0: count += 1 print("количество элементов списка, удовлетворяющих заданному условию:", count)
количество элементов списка, удовлетворяющих заданному условию: 6 

2. Применение len() со списковыми включениями для подсчета в списке Python

В представленном ниже фрагменте кода, мы используем списковые включения (list comprehension), чтобы создать новый список, элементы которого соответствует заданному условию, после чего мы получаем длину собранного списка. Это намного легче понять на примере, поэтому давайте перейдем к нему.

 
 
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20] element_count = len([item for item in list_numbers if item%5 == 0]) print( "количество элементов списка, удовлетворяющих заданному условию:", element_count )
количество элементов списка, удовлетворяющих заданному условию: 6 

Подсчет ненулевых элементов

В этом примере мы находим общее количество ненулевых элементов. Чтобы узнать число нулевых членов списка, мы можем просто изменить условие на if item == 0 .

 
 
list_numbers = [78, 99, 66, 44, 50, 30, 45, 0, 0, 0] element_count = len([item for item in list_numbers if item != 0]) print( "количество элементов списка, удовлетворяющих заданному условию:", element_count )
количество элементов списка, удовлетворяющих заданному условию: 7 

3. sum() и выражение-генератор для подсчета в списке Python

В этом примере кода мы используем sum() с генераторным выражением. Каждый элемент списка проходит проверку условием и для тех элементов, которые ему удовлетворяют, возвращается значение True . Метод sum() в свою очередь подсчитывает общее число истинных значений.

 
 
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20] count = 0 count = sum(True for i in list_numbers if i % 5 == 0) print( "количество элементов списка, удовлетворяющих заданному условию:", count )
количество элементов списка, удовлетворяющих заданному условию: 6 

4. sum() и map() для подсчета элементов списка Python с условиями или критериями

Функция map(fun, iterable) принимает два аргумента: итерируемый объект (это может быть строка, кортеж, список или словарь) и функцию, которая применяется к каждому его элементу, — и возвращает map-объект (итератор). Для применения одной функции внутри другой идеально подходит лямбда-функция. Таким образом, map() примет первый аргумент в виде лямбда-функции.

Здесь sum() используется с функцией map() , чтобы получить количество всех элементов списка, которые делятся на 5.

Давайте разберемся на примере, в котором переданная лямбда-функция предназначена для фильтрации членов списка, не кратных 5.

 
 
list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20] count = 0 count = sum(map(lambda item: item % 5 == 0, list_numbers)) print( "количество элементов списка, удовлетворяющих заданному условию:", count )
количество элементов списка, удовлетворяющих заданному условию: 6 

5. reduce() с лямбда-функцией для подсчета элементов списка Python с условием или критериями

Lambda — это анонимная (без имени) функция, которая может принимать много параметров, но тело функции должно содержать только одно выражение. Лямбда-функции чаще всего применяют для передачи в качестве аргументов в другие функции или для написания более лаконичного кода. В этом примере мы собираемся использовать функции sum() , map() и reduce() для подсчета элементов в списке, которые делятся на 5.

Приведенный ниже код наглядно демонстрирует это.

 
 
from functools import reduce list_numbers = [78, 99, 66, 44, 50, 30, 45, 15, 25, 20] result_count = reduce( lambda count, item: count + (item % 5 == 0), list_numbers, 0 ) print( "количество элементов списка, удовлетворяющих заданному условию:", result_count )
количество элементов списка, удовлетворяющих заданному условию: 6

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

Подсчет количества элементов в коллекции

Для подсчета вхождений значения в массиве numpy. Это будет работать так:

import numpy as np a=np.array([0,3,4,3,5,4,7]) print(np.sum(a==3)) # 2

Логика заключается в том, что Булево выражение создает массив, в котором все вхождения запрошенных значений равны 1, а все остальные равны нулю. Таким образом, суммируя их, мы получим количество случаев вхождения. Это работает для массивов любой формы или типа. Не забудьте убедиться, что вы установили пакет NumPy .

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

  • уникальный - автоматически выравнивает многомерные массивы
  • бинарный подсчет - работает только с одномерными массивами, содержащими только положительные целые числа
unique, counts = np.unique(a, return_counts=True) print(unique , counts) # counts[i] равняется вхождениям unique[i] в a # [0 3 4 5 7] [1 2 2 1 1] bin_count=np.bincount(a) print(bin_count) # bin_count[i] равняется вхождениям i в a # [1 0 0 2 2 1 0 1] 

Если ваши данные представляют собой массивы numpy, как правило, гораздо быстрее использовать методы numpy, чем преобразовывать данные в универсальные методы.

Подсчет всех вхождений всех элементов в итерируемом: collection.Counter

from collections import Counter c = Counter(["a", "b", "c", "d", "a", "b", "a", "c", "d"]) c # Counter() c["a"] # 3 c[7] # не в списке (7 входило 0 раз!) # 0

collections.Counter может быть использован для любого итератора и подсчитывает каждое вхождение для каждого элемента.
Примечание: Одно исключение , если dict или другой collections.Mapping -как класса дается, то он не будет считать их, а это создает счетчик с этими значениями:

Примечание: Одно исключение , если dict или другой collections.Mapping -как класса дается, то он не будет считать их, а это создает счетчик с этими значениями:

Counter() # Counter() Counter() # Counter не проверяет значения типа int # Counter()

Подсчет вхождений подстроки в строку: str.count

astring = 'thisisashorttext' astring.count('t') # 4

Это работает даже для подстрок длиннее одного символа:

astring.count('th') # 1 astring.count('is') # 2 astring.count('text') # 1

которое не было бы возможно с collections.Counter , который только подсчитывает одиночные символы:

from collections import Counter Counter(astring) # Counter()

Подсчет вхождений одного элемента в последовательности: list.count() и tuple.count()

alist = [1, 2, 3, 4, 1, 2, 1, 3, 4] alist.count(1) # 3 atuple =('bear', 'weasel', 'bear', 'frog') atuple.count('bear') # 2 atuple.count('fox') # 0 

Получение наиболее распространенного значения: collection.Counter

Подсчет ключи от Mapping не представляется возможным с collections.Counter , но мы можем посчитать значения:

from collections import Counter adict = Counter(adict.values()) # Counter()

Наиболее распространенные элементы доступны с помощью метода most_common :

# сортируем их от наиболее распространенного # до наименее распространенного значения: Counter(adict.values()).most_common() # [(5, 3), (2, 2), (3, 1)] # получим наиболее распространенное значение Counter(adict.values()).most_common(1) # [(5, 3)] # получим 2 самых распространенных значения Counter(adict.values()).most_common(2) # [(5, 3), (2, 2)]

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

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