例如,我们有任务,在列表中选择前10个偶数.
这可以通过简单的for循环轻松完成:
i = 0 list_even = [] for x in range(30): if x % 2 == 0 and i < 10: list_even.append(x) i += 1 print(list_even) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] - correct!
怎么可能与列表理解相同?
我试图使用枚举,但它计算所有元素,不仅满足if语句,所以我不能使用枚举中的索引作为计数器.
list_even = [x for i, x in enumerate(range(30)) if x % 2 == 0 and i < 10] print(list_even) # [0, 2, 4, 6, 8] - incorrect!
我描述的任务只是示例 - 我正在写关于列表推导的文章,并希望了解这类任务的细节和一般解决方案.
首先只过滤,然后只计算已经过滤的值?
>>> [x for i, x in enumerate(x for x in range(30) if x % 2 == 0) if i < 10] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
虽然islice
可能是一个更好的方式来说你只想要前10个:
>>> list(itertools.islice((x for x in range(30) if x % 2 == 0), 10)) [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
如果时间/空间不是问题,或者只是获取完整列表的一部分:
>>> [x for x in range(30) if x % 2 == 0][:10] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]