代码之家  ›  专栏  ›  技术社区  ›  Barthelemy

有效计算过滤列表的大小

  •  1
  • Barthelemy  · 技术社区  · 14 年前

    我想有效地计算一个过滤列表的大小,也就是说,我不想把整个过滤列表保存在内存中,我只想得到它的大小。有没有比使用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
    

    如果我不清楚的话,请道歉。尽管第一个列表(例如,my_list)已经在内存中,但我不想创建一个包含筛选元素的额外列表来对它们进行计数。我知道发电机和sum,但只是没有把它们联系起来。。。谢谢你的回答。

    2 回复  |  直到 14 年前
        1
  •  6
  •   John La Rooy    14 年前
    size_of_filtered_list = sum(1 for item in my_list if item % 2 == 0)
    
        2
  •  2
  •   ghostdog74    14 年前
    size_of_filtered_list = sum(item%2==0 for item in my_list)