list
var ve başka bir liste (kavrama yoluyla) oluşturmak istiyorum.Anlamanın büyüklüğü nasıl sınırlanır?
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
çünkü
Aşağıdaki kod başarısız olur koşulu aracılığıyla, boyut olarak sınırlı istiyorum Anlama zamanı inşa edilmiştir.
yapı anda yeni listenin boyutunu sınırlamak için bir yolu var mı?
Not: bir karşı ulaşıldığında düzgün break
ile for
döngüye anlama kırabilir ama anlama kullanan bir mekanizma olup olmadığını bilmek istiyorum. Bu o 3 unsurları üretmek için gerektiğinden daha size daha fazla iş yapmayın sağlar
from itertools import islice
filtered = (i for i in a if i == 1)
b = list(islice(filtered, 3))
:
[1/i aralıkta (-5, 5)] 'patlak verir ve sonuna kadar iterasyon yapmaz. –
@StefanPochmann: Bu bir istisna artar, bu * bir 'break' ifadesiyle aynı şey değildir. Sonuçta, hiç sonuç listeniz yok. –
"break" ifadesini kastettiğiniz açık değildi, bu kelime daha genel bir şekilde anlaşılabilir. [Örneğin] (http://stackoverflow.com/a/38675546/1672429) uzun bir süre önce dediniz * "[' '' '' '' '' '' '' '”] döngüden çıkar. Her durumda, yineleme sona ermez. Ayrıca, bir liste sonucunun olmaması bile bir sorun olmak zorunda değildir. Reciprocals = [1/x for a] 'düşünün, bu makul bir kod olduğunu ve eğer bir 'sıfır' içeriyorsa o zaman bir 'ZeroDivisionError' isteyebilir ve bir liste istemez. –