Вопрос:
Я ищу, чтобы иметь возможность писать альтернативный код для встроенного счета в 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