Я хочу подсчитать, сколько членов итерабельного удовлетворяют заданному условию. Я хотел бы сделать это таким образом, чтобы это было ясно и просто и желательно разумно оптимально.
Мои лучшие лучшие идеи:
sum(meets_condition(x) for x in my_list)
и
len([x for x in my_list if meets_condition(x)])
Первый, основанный на итераторе, предположительно быстрее для больших списков. И это та же форма, что и для тестирования. Однако это зависит от того, что int (True) == 1, что несколько уродливо.
Второй мне кажется легче читать, но он отличается от любой и всех форм.
Есть ли у кого-нибудь лучшие предложения? есть ли где-то библиотечная функция, которой я не хватает?