Учитывая элемент, как я могу подсчитать его вхождения в списке в Python?
Вот пример списка:
>>> l = list('aaaaabbbbcccdde')
>>> l
['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'e']
list.count
Это list.count
метод
>>> l.count('b')
4
Это прекрасно работает для любого списка. У кортежей также есть этот метод:
>>> t = tuple('aabbbffffff')
>>> t
('a', 'a', 'b', 'b', 'b', 'f', 'f', 'f', 'f', 'f', 'f')
>>> t.count('f')
6
collections.Counter
А потом есть коллекции. Счетчик. Вы можете сбросить любую итерацию в счетчик, а не просто в список, и счетчик сохранит структуру данных счетчиков элементов.
Использование:
>>> from collections import Counter
>>> c = Counter(l)
>>> c['b']
4
Счетчики основаны на словарях Python, их ключи являются элементами, поэтому ключи должны быть хэшируемыми. Они в основном похожи на наборы, которые допускают избыточные элементы в них.
Дальнейшее использование collections.Counter
Вы можете добавлять или вычитать с помощью итераций со своего счетчика:
>>> c.update(list('bbb'))
>>> c['b']
7
>>> c.subtract(list('bbb'))
>>> c['b']
4
И вы можете выполнять множественные операции со счетчиком:
>>> c2 = Counter(list('aabbxyz'))
>>> c - c2 # set difference
Counter({'a': 3, 'c': 3, 'b': 2, 'd': 2, 'e': 1})
>>> c + c2 # addition of all elements
Counter({'a': 7, 'b': 6, 'c': 3, 'd': 2, 'e': 1, 'y': 1, 'x': 1, 'z': 1})
>>> c | c2 # set union
Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1, 'y': 1, 'x': 1, 'z': 1})
>>> c & c2 # set intersection
Counter({'a': 2, 'b': 2})
Почему не панды?
Другой ответ предполагает:
Почему бы не использовать панд?
Панды - это обычная библиотека, но ее нет в стандартной библиотеке. Добавление его в качестве требования нетривиально.
Для этого варианта использования имеются встроенные решения как в самом объекте списка, так и в стандартной библиотеке.
Если ваш проект еще не требует панд, было бы глупо сделать это требованием только для этой функциональности.