2012-10-04 77 views
2

當n個項目添加到新列表中時,是否有可能停止列表理解?python list comprehension set max len

例如,

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

爲了確認:我想要得到的列表的長度限定爲10「」是僞碼所取得的當前列表。我使用python 2.7

+0

什麼是''? – 2012-10-04 20:21:29

+0

在上面的情況下看起來是僞代碼,用於引用當前正在構建的列表 –

+0

我仍然不明白問題所在。 – 2012-10-04 20:23:17

回答

9

編號但itertools.islice()可以給你一個生成器,只產生給定數量的項目。

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

這是最簡單的方法。值得注意的是,如果你使用序列作爲源,你可以做一個正常的列表片。 –

1

如果xrange是發電機的使用,只是做

list(xrange(20))[:10] 
2

這是可以做到,但是這將取決於執行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]」等。

+1

'_ [1]'只適用於翻譯。 –

相關問題