Как считать вхождения элемента в одномерном массиве на Python
-
Используя
collections
вы можете найти количество вхождений в массив на Python -
Используя библиотеку
NumPy
, мы можем найти количество вхождений в массив на Python
При работе с массивом одной из основных проблем, с которой может столкнуться разработчик, является подсчет количества вхождений элемента. Представьте себе, что если у вас есть массив по количеству проданных элементов на сайте электронной коммерции за 10 дней, то вы хотели бы знать количество дней, когда продается более 100 элементов.
sales=[0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]
Самый простой способ решить эту проблему - получить количество раз по 100 в массиве.
Используя collections
вы можете найти количество вхождений в массив на Python
collections
действуют как контейнеры для хранения данных. Мы можем легко импортировать модуль сбора данных и использовать функцию счетчика.
Проверьте код ниже:
>>>import collections
>>>sales=[0, 100, 100, 80, 70, 80, 20, 10, 100, 100, 80, 70, 10, 30, 40]
>>>print(collections.Counter(sales))
Counter({100: 4, 80: 3, 70: 2, 10: 2, 0: 1, 20: 1, 30: 1, 40: 1})
Результирующий вывод - словарь. В нем перечислено, сколько раз каждый элемент массива произошел.
Однако, если мы хотим вывести количество раз по 100 в массиве продаж, мы можем получить его из словаря.
>>>print(collections.Counter(sales)[100])
4
Модуль Collection
также работает с десятичными числами и строками.
>>>floatarr=[0.7, 10.0, 10.1, .8, .7, .8, .2, .1, 10.0,
10.0, .8, .8, .7, .7, .8]
>>>print(collections.Counter(floatarr))
Counter({0.8: 5, 0.7: 4, 10.0: 3, 10.1: 1, 0.2: 1, 0.1: 1})
>>>stringarr=["george","mark","george","steve","george"]
>>>print(collections.Counter(stringarr))
Counter({'george': 3, 'mark': 1, 'steve': 1})
Используя библиотеку NumPy
, мы можем найти количество вхождений в массив на Python
Тем не менее, мы также можем использовать NumPy, который является библиотекой, определенной на Python для работы с большими массивами, а также содержит большое количество математических функций.
Существует несколько способов использования функций, определенных в NumPy, для возврата количества элементов в массиве.
Использование функции unique
в Numpy
Функция Unique
вместе с функцией Count возвращает словарь подсчета каждого элемента. Также работает с десятичными числами и строками.
>>>import collections, numpy
>>>aUnique = numpy.array([0, 100, 100, 80, 70, 80, 20, 10, 100,
100, 80, 70, 10, 30, 40])
>>>unique, counts = numpy.unique(aUnique, return_counts=True)
>>>print(dict(zip(unique, counts)));
{0: 1, 10: 2, 20: 1, 30: 1, 40: 1, 70: 2, 80: 3, 100: 4}
Использование функции count_nonzero
в Numpy
Использование count_nonzero
возвращает количество искомого элемента. Это обеспечивает легкий для чтения интерфейс и меньшее количество строк кода.
>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10,
100, 100, 80, 70, 10, 30, 40,"abc"])
>>>print(numpy.count_nonzero(aCountZero == "abc"))
1
count_nonzero
также работает с десятичными числами и строками.
>>>aCountZero = numpy.array([0, 100.1, 100.1, 80, 70, 80, 20, 10,
100, 100, 80, 70, 10, 30, 40])
>>>print(numpy.count_nonzero(aCountZero == 100.1))
1
Использование функции bincount
в Numpy - только для массивов с целыми числами
Однако, если у вас есть массив, состоящий только из целых чисел, вы можете использовать функцию bincount
в NumPy. Самое лучшее, что она возвращает результаты в виде массива.
>>>abit = numpy.array([0, 6, 0, 10, 0, 1, 1, 0, 10, 9, 0, 1])
>>>print(numpy.bincount(abit))
[5 3 0 0 0 0 1 0 0 1 2]
Для чисел в массиве результат отображает количество элементов в порядке возрастания. Например, 0 в массиве abit
происходит 5 раз, а 10, 2 раза, что обозначается первым и последним элементом массива.
В заключение следует отметить, что существует достаточно большое количество вариантов, из которых можно выбрать, когда нужно узнать количество вхождений элемента в одномерный массив. Следуйте за нами, как мы обсуждаем эффективность каждого из этих решений во времени, в нашей следующей статье.