是否可以在将 n 个项目添加到新列表时停止列表理解?
例如,
[x for x in xrange(20) if len(<this>) < 10 ]
确认:我想将结果列表的长度限制为 10。“”是当前列表的伪代码。我使用python 2.7
是否可以在将 n 个项目添加到新列表时停止列表理解?
例如,
[x for x in xrange(20) if len(<this>) < 10 ]
确认:我想将结果列表的长度限制为 10。“”是当前列表的伪代码。我使用python 2.7
不,但是itertools.islice()
可以给你一个只产生给定数量的项目的生成器。
>>> list(itertools.islice('foobar', 3))
['f', 'o', 'o']
这可以做到,但这取决于您使用的 Python 的实现,因为它取决于列表推导的实现。CPython 中“这个列表理解”的名称是“ _[1]
”,因此例如您可以执行以下操作(自己尝试一下,它确实会起作用):
[i for i in xrange(20) if len(locals().get("_[1]")) < 10]
您不太可能使用真实的生产代码来执行此操作。这是荒谬的,如果有人使用任何其他实现,它可能会崩溃。相反,只需使用一个循环:
l = []
for i in xrange(20):
l.append(i)
if len(l) >= 10:
break
locals().get("_[1]")
之所以有效,是因为 Python 需要在列表理解构造期间将当前列表存储在某个位置。" _[1]
" 的选择有些武断,因为任何人都不太可能将其用作变量名。如果您碰巧构建了一个嵌套列表推导式,它们会将列表存储在更高递增的变量名称中,例如“ _[2]
”和“ _[3]
”等。
如果xrange
是您使用的生成器,请执行
list(xrange(20))[:10]