Эффективное вычисление размера отфильтрованного списка - PullRequest
1 голос
/ 20 октября 2010

Я хотел бы эффективно рассчитать размер отфильтрованного списка, то есть я не хочу хранить весь отфильтрованный список в памяти, я просто хочу получить его размер. Есть ли более "питонный" способ, чем вычисление размера с помощью цикла for?

Например:

my_list = [1,2,3,4]

# this loads the entire **filtered** list in memory
size_of_filtered_list = len([item for item in my_list if item % 2 == 0])

# is there a more pythonic way than this?
size_of_filtered_list = 0
for item in my_list:
    if item % 2 == 0:
        size_of_filtered_list += 1

UPDATE

Извиняюсь, если мне не ясно. Хотя первый список (например, my_list) уже находится в памяти, я не хочу создавать дополнительный список, содержащий отфильтрованные элементы, просто для их подсчета. Я знал о генераторах и сумме, но просто не связывал точки ... Спасибо за ваши ответы.

Ответы [ 2 ]

6 голосов
/ 20 октября 2010
size_of_filtered_list = sum(1 for item in my_list if item % 2 == 0)
2 голосов
/ 20 октября 2010
size_of_filtered_list = sum(item%2==0 for item in my_list)
...