için aralıklar ile genellikle döngü birkaç tekrarlamadan atlamak ama şimdi döngüde birkaç adım atlamak istiyoruz nasıl. Daha spesifik olarak, continue(10)
gibi bir şey istiyorum, böylece tüm döngüyü atlayıp sayacı 10 artırırdım. C için bir döngü kullansaydım, sadece 10 ile i
derdim, ama Python'da gerçekten işe yaramaz .Sadece</p> <p>tarafından python'da döngü
cevap
for
döngüsünün hedef listesini (bu durumda i
) değiştiremezsiniz. Alternatif olarak,
while i < 10:
i += 1
if i == 2:
i += 3
bir iterable kullanımı ve artırmak: yerine while
döngü kullanarak yerel bir değişkene iter()
sonucunu atayarak
from itertools import islice
numbers = iter(range(10))
for i in numbers:
if i == 2:
next(islice(numbers, 3, 3), None) # consume 3
, kullandığımız döngü içinde döngü sekansı ilerlemeden standart iterasyon araçları (next()
, veya burada itertools
tarifinin kısaltılmış bir versiyonu). for
normalde bir yineleyici üzerinde döngü yaparken bizim için iter()
'u çağırır.
Yineleyiciyi bir adaya atamak en iyi yoldur - bir yineleyicinin karşısındaki yinelemeli olması (yinelenen bir değişiklik - örneğin bir liste - her seferinde yineleme yaptığınızda baştan başlar). Bu durumda, sadece the iter()
built-in function kullanın:
numbers = iter(range(100))
Sonra adını kullanarak döngü içine ilerlemeden. Bunu yapmanın en iyi yolu
the itertools
consume()
recipe - hızlı olduğu için (
itertools
işlevini kullanır) yinelemenin düşük düzey kodda olmasını sağlamak, değerleri çok hızlı tüketme işlemini yapmak ve tüketilen değerleri depolayarak belleği kullanmaktan kaçınır.):
numbers = iter(range(100))
for i in numbers:
...
if some_check(i):
consume(numbers, 3) # Skip 3 ahead.
Python 3'te bile, bunun çalışması için * * 'nin 'range()' de 'iter() işlevini çağırdığını unutmayın. Python 3 'range()' nesnesi, bir yineleyici değil, bir dizidir (yinelenebilir). –
@MartijnPieters İnanılmaz güzel nokta. Düzenlenen. Aralıklar üzerinde yineliyorum o kadar az ki, böyle olduğunu unuttum. –
Harika cevap +1 –
Neden sadece kadar atlamak için değerini ayarlayın: bunu yaparak
from itertools import islice
import collections
def consume(iterator, n):
"Advance the iterator n-steps ahead. If n is none, consume entirely."
# Use functions that consume iterators at C speed.
if n is None:
# feed the entire iterator into a zero-length deque
collections.deque(iterator, maxlen=0)
else:
# advance to the empty slice starting at position n
next(islice(iterator, n, n), None)
, gibi bir şey yapabilirim? Gibi:
skip_until = 0
for i in range(100):
if i < skip_until:
continue
if SOME_CONDITION:
skip_until = i + 10
DO_SOMETHING()
SOME_CONDITION ne olursa olsun atlamak ve DO_SOMETHING() gerçek döngü içeriği olan sebep olduğu
? döngüler olsa sadece üzgün iken
+1, 'devam 'en az kıvrık yoldur. – 2rs2ts
Bu, Python'da yürütülmesi gereken döngü ve her seferinde atanan ismi gerektirdiğine dikkat çekiyor - çoğu durumda bir problem olması muhtemel olmasa da, bu anlamda çok daha az verimlidir. –
Evet, ama basit bir cevap istediğini düşündüğüm sorunun sadeliği göz önüne alındığında; Yineleyicilerle uğraşmak, döngüler/atlamalar küçükse, fazlalık gibi görünüyor. –
for i in range(0, 100, 10):
print(i)
yazdırır 0, 10, 20 ...
Merhaba, bu ilk 10 değerleri atlamasa da, askerin ** ** 'de ** iken keyfi bir değere nasıl atlayacağını bilmeye daha çok ilgi duyduğunu düşünüyorum. Örnek için en iyi cevaba bakınız. – seth
Bunun için kesinlikle python 3.3'e ihtiyacınız yok. –
- 1. Nümerik dizi veya pandalarla pythonda rutini sadeleştirme
- 2. jsBir döngü döngü <string>
- 3. `döngü {}` döngü {uyku 1} `karşı`
- 4. Döngü yinelemeleri için özellikler dosyası tarafından kontrol ediliyor mu?
- 5. Döngü
- 6. WordPress Döngü: Döngü
- 7. R döngü için döngü
- 8. Döngü
- 9. döngü
- 10. : döngü
- 11. döngü
- 12. Döngü
- 13. Döngü
- 14. Döngü,
- 15. döngü
- 16. Döngü
- 17. Döngü
- 18. Zaman tabanlı döngü ve Çerçeve tabanlı döngü
- 19. Döngü numaralarını döngü ile numaralandır
- 20. Döngü sona ermezken döngü süresi
- 21. Döngü İçinde Fare Tıklatıldığında Döngü
- 22. Döngü sayacı için django
- 23. Android Run Döngü Anatomisi
- 24. <canvas> etiketini kullanırken bir döngü nasıl çizebilirim
- 25. DisplayFor neden IEnumerable <DateTime> üzerinden döngü oluşturmuyor?
- 26. Döngü tamamen jQuery
- 27. rest_in_place döngü içinde bir döngü içinde seçin
- 28. JMeter - değişken döngü sayısı olan döngü denetleyicisi
- 29. Döngü Desteğinin ... Döngü Desteği JavaScript’te Bul
- 30. Matlab döngü için azalan döngü sayacı
Ben, bu durumda olabileceğini düşündüm. –
Sonuçta while döngüsüyle devam ediyor! Teşekkürler bir ton! –
@AlexS Sayıların üzerinde yineleme yapıyorsanız, bu iyi - eğer bu sayıları listeler için endeksler olarak kullanıyorsanız veya lütfen, bunu yapma. Dizine göre yineleme her şekilde kötüdür. –