Подсчитайте количество элементов, которые возвращают 1 в списке в одной строке

#python

#python

Вопрос:

У меня действительно простой и простой вопрос, но по какой-то причине я не могу его решить. У меня есть следующий код на python:

 counter = 0
for el in mylist:
    if self.check_el(el):
        counter  = 1
 

Я хочу сделать это в одной строке. Возможно ли это достичь?

Ответ №1:

Да, вот один вариант:

 counter = sum(1 for el in mylist if self.check_el(el))
 

Ответ №2:

 counter = sum(int(self.check_el(el)) for el in mylist)
 

Ответ №3:

 sum(map(lambda el: bool(self.check_el(el)), my_list))
 

Или, если вы знаете check_el , всегда возвращает bool:

 sum(map(self.check_el, my_list))
 

Ответ №4:

Я предлагаю

 len(list(filter(self.check_el, mylist)))
 

Он отфильтровывает все элементы, не выполняющие self.check_el, преобразует объект фильтра в список, а затем принимает длину указанного списка. Если вы хотите перебирать элементы, filter(self.check_el, mylist) это итеративно.

Комментарии:

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