我有一个list
并想要构建(通过理解)另一个列表。我希望通过一个条件限制这个新列表的大小
下面的代码将会失败:
a = [1, 2, 1, 2, 1, 2]
b = [i for i in a if i == 1 and len(b) < 3]
with
Traceback (most recent call last):
File "compr.py", line 2, in <module>
b = [i for i in a if i == 1 and len(b) < 3]
File "compr.py", line 2, in <listcomp>
b = [i for i in a if i == 1 and len(b) < 3]
NameError: name 'b' is not defined
because b
没有定义yet当理解力建立起来时。
有没有办法在构建时限制新列表的大小?
注意:我可以将理解分解为for
用适当的循环break
当达到计数器时,但我想知道是否有一种使用理解的机制。
您可以使用生成器表达式进行过滤,然后使用islice()
限制迭代次数:
from itertools import islice
filtered = (i for i in a if i == 1)
b = list(islice(filtered, 3))
这可以确保您不会做超出生产这 3 个元素所需的工作。
请注意,这里不再使用列表理解了;列表理解无法被打破,你被锁定迭代到最后。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)