Альтернатива list.count() в python

Вопрос: Я ищу, чтобы иметь возможность писать альтернативный код для встроенного счета в python: этот код работает def count(element,seq): """Counts how often an element occurs ...in a sequence""" mycount = seq.count(element) return mycount но я хотел бы написать его в цикле for (или по-другому?), я получил это далеко: def count(element,seq): """Counts how often an element

Вопрос:

Я ищу, чтобы иметь возможность писать альтернативный код для встроенного счета в python: этот код работает

def count(element,seq): «»»Counts how often an element occurs …in a sequence»»» mycount = seq.count(element) return mycount

но я хотел бы написать его в цикле for (или по-другому?), я получил это далеко:

def count(element,seq): «»»Counts how often an element occurs …in a sequence»»» for i in seq: if element == seq: print i

Я не уверен, как вернуть повторяющиеся элементы как целое число. Любая помощь ценится !!

Лучший ответ:

Как насчет этого:

def count(element,seq): «»»Counts how often an element occurs …in a sequence»»» count = 0 for i in seq: if element == i: count += 1 return count

Что это делает: он перебирает каждый элемент в seq, и если этот элемент равен element, он добавляет 1 к count (который изначально равен 0), а затем возвращает count после окончания цикла.

Использование цикла for таким образом означает, что на данный момент имеется только один элемент seq, позволяющий эффективно сканировать огромные последовательности.

Ответ №1

Используйте sum() и выражение генератора:

def count(element,seq): «»»Counts how often an element occurs …in a sequence»»» return sum(1 for i in seq if i == element)

Что это делает: он перебирает каждый элемент в seq, и если этот элемент равен element, он генерирует значение 1, которое sum() добавляет, чтобы получить общее количество.

Используя выражение генератора, как это означает, что есть только когда – либо один элемент из seq которые ссылаются в то время, что позволяет вам эффективно сканировать огромные последовательности.

Ответ №2

Еще один способ

from collections import Counter def count(elem, seq): return Counter(seq)[elem]

И еще один способ

>>> from itertools import compress >>> len(list(compress(seq, [e == 1 for e in seq]))) 3

с небольшим изменением

>>> sum(1 for _ in compress(seq, [e == 1 for e in seq])) 3

другая реализация с использованием фильтра

>>> len(filter(None, [e == 1 for e in seq])) 3 Ответ №3

Если вы хотите записать его как цикл for, в соответствии с вашим примером:

def count(element, sequence): c = 0 for e in sequence: if e == element: c += 1 return c

Оцените статью
Добавить комментарий