python列表理解集max len

python列表理解集max len,python,list-comprehension,Python,List Comprehension,当n个项目添加到新列表中时,是否可以停止列表理解 e、 g [x for x in xrange(20) if len(<this>) < 10 ] [x表示x范围内的x(20),如果len()

当n个项目添加到新列表中时,是否可以停止列表理解

e、 g

[x for x in xrange(20) if len(<this>) < 10 ]
[x表示x范围内的x(20),如果len()<10]
确认:我想将结果列表的长度限制为10。“”是正在生成的当前列表的伪代码。我使用的是Python2.7,但它可以为您提供一个只生成给定数量项的生成器

>>> list(itertools.islice('foobar', 3))
['f', 'o', 'o']

如果
xrange
是您使用的生成器,只需执行以下操作

list(xrange(20))[:10]

这是可以做到的,但这取决于您正在使用的Python的实现,因为它取决于列表理解的实现。CPython中“此列表理解”的名称为“
\u1]
”,因此,例如,您可以执行以下操作(您自己试试,它确实会起作用):


locals().get(“[1]”)之所以有效,是因为Python在构建列表时需要将当前列表存储在某个地方。“
\[1]
”的选择有些随意,因为不太可能有人将其用作变量名。如果您碰巧构建了一个嵌套列表,这些列表将以更高的递增变量名存储列表,例如,“
\uu2]
”和“
\u3]
”依此类推。

在上述情况下,对于当前正在构造的列表的引用,似乎是伪代码。我仍然不理解这个问题。@Tichodroma他只想取前10项,例如。@Tichodroma:询问者想限制结果列表的长度。如果替换
xrange()
如果有一个无限的生成器,你就永远不会有机会将其切分。这是最简单的通用方法。值得注意的是,如果您使用一个序列作为源,您可以只做一个普通的列表切片。
[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