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