python list comprehension set max len

时间:2012-10-04 20:19:52

标签: python list-comprehension

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

例如,

[x for x in xrange(20) if len(<this>) < 10 ]

确认:我想将结果列表的长度限制为10.“”是当前列表的伪代码。我正在使用python 2.7

3 个答案:

答案 0 :(得分:10)

没有。但itertools.islice()可以为您提供仅生成给定数量项目的生成器。

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

答案 1 :(得分:2)

这可以做到,但它取决于你正在使用的Python的实现,因为它取决于列表推导的实现。 CPython中“this list comprehension”的名称是“_[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]”等等。

答案 2 :(得分:1)

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

list(xrange(20))[:10]