问题描述
我正在做一个条件列表理解,例如div
。我想将 resulting 列表的长度限制为特定数字。
如果不先理解整个列表然后将其切片,这可能吗?
我想象的东西具有以下功能:
onChange
对原始列表进行切片(例如,newlist = [x for x in list if x % 2 == 0]
是不可能的,因为在我的特定用例中,if 条件不会在任何可预测的时间间隔内返回 limit = 10
newlist = []
for x in list:
if len(newlist) > limit:
break
if x % 2 == 0:
newlist.append(x)
。
非常感谢。
解决方法
请不要将任何变量命名为 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))
,
由于您使用列表推导式创建列表,因此您可以在创建列表后直接对其进行切片。
[x for x in list[:25] if x % 2 == 0][:limit]