#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. Учитывая гораздо более простые подходы, которые были опубликованы до сих пор, я бы сказал, что это огромный перебор.