Yineleme Python çift olarak bir liste (şimdiki, gelecek)
Ben bazen Python listesi "" eleman "" element. next geçerli bakarak yineleme gerekir Şimdiye kadar, bu yüzden gibi bir kod ile yaptım:
for current, next in zip(the_list, the_list[1:]):
# Do something
Bu çalışır ve beklentim yok, ama aynı şeyi yapmak için daha fazla deyimsel ya da verimli bir yolu var mı?
CEVAP
İşte itertools modül dokümanlar ilgili bir örnek:
import itertools
def pairwise(iterable):
"s -> (s0,s1), (s1,s2), (s2, s3), ..."
a, b = itertools.tee(iterable)
next(b, None)
return itertools.izip(a, b)
Bu nasıl çalışır:
İlk olarak, iki paralel kullanımına, a
b
oluşturulan (tee()
çağrı), her ikisi de orijinal iterable ilk elemanı işaret. İkinci yineleyici, b
1 ileri (next(b, None)
) çağrısı) adım taşınır. Bu noktada a
s1 ve s0 b
puan için puan. Her iki a
b
traverse orijinal yineleyici bağımsız olarak - izip işlevi iki kullanımına alır ve döndürülen elemanların çift, aynı tempoda her iki kullanımına ilerleyen yapar.
Bir uyarı: tee()
Bu işlev birbirinden bağımsız olarak önceden iki kullanımına üretir, ama bir maliyetle geliyor. Eğer birinin kullanımına ilerlemeler, daha başka, daha sonra tee()
ihtiyaçları için tüketilen unsurları bellek kadar ikinci yineleyici comsumes onları da (olamaz 'geri sarma' orijinal yineleyici). Burada bir yineleyici sadece 1 Adım diğer önde olduğu için önemli değil, ama genel olarak kolay bellek bu şekilde çok kullanmak.
Python tam olarak ne'In yineleyic...
Liste üreteci çift Yineleme...
Nasıl Python ile şimdiki zaman almak i...
Nasıl Python ile eşit büyüklükte parça...
Python katılın, neden dize.liste yerin...