在Python中,是否有可能限制条件列表推导的长度?

4

我正在使用条件列表推导式例如newlist = [x for x in list if x % 2 == 0]。我想将结果列表的长度限制到特定数量。

是否有可能在不首先完全理解列表并对其进行切片的情况下实现这一点?

我想象中的功能类似于:

limit = 10
newlist = []

for x in list:

    if len(newlist) > limit:
        break 

    if x % 2 == 0:
        newlist.append(x)

在我的特定用例中,由于if条件不会以任何可预测的间隔返回True,因此无法对原始列表进行切片(例如[x for x in list[:25] if x % 2 == 0])。

提前感谢。


1
虽然这是可能的,但你为什么要这样做呢?解决方案将包括几个深度嵌套的表达式 - 使用循环很可能更易读。 - MisterMiyagi
2个回答

9
请不要将任何变量命名为list,因为这会遮蔽内置的list构造函数。在此我使用li作为输入列表的替代名称。
import itertools as it

gen = (x for x in li if x % 2 == 0)  # Lazy generator.
result = list(it.islice(gen, 25))

-2

由于你正在使用列表推导式来创建一个列表,所以你可以在它创建后直接对列表进行切片。

[x for x in list[:25] if x % 2 == 0][:limit]


这明确不是问题所需的:“在不先理解整个列表然后对其进行切片的情况下,这是否可能?” - MisterMiyagi
嘿,看起来是这样。这就是你在深夜回答问题时得到的结果。 - thanosp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接