我有一個list
並想構建(通過理解)另一個列表。我想在大小受到限制,這個新的列表,通過條件如何限制理解的大小?
下面的代碼將失敗:
a = [1, 2, 1, 2, 1, 2]
b = [i for i in a if i == 1 and len(b) < 3]
與
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
因爲b
在沒有定義尚未理解建立的時間。
有沒有辦法在構建時限制新列表的大小?
注:我能打破理解成for
循環用正確的break
到達櫃檯時,但我想知道是否有一種使用一個理解的機制。
'[1 /我在範圍內(-5,5)]'確實爆發了,並且不會迭代到最後。 –
@StefanPochmann:它引發了一個異常,這與* break語句不同*。最後,你根本沒有列表結果。 –
對我而言,你並不清楚你的意思是「break」陳述,那麼這個詞可以用更一般的方式來理解。 [例如](http://stackoverflow.com/a/38675546/1672429)不久前你說*「['return']打破循環」*。無論如何,迭代不會結束。另外,沒有列表結果甚至不是一個問題。考慮'倒數= [1/x對於a]',我認爲這是合理的代碼,如果'a'包含一個零,那麼可能需要一個'ZeroDivisionError'而不需要一個列表。 –