SORU
25 Mart 2011, Cuma


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
25 Mart 2011, Cuma


İş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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • PoreoticsHD

    PoreoticsHD

    22 NİSAN 2010
  • TastyTuts | Creative video tutorials by Gareth David

    TastyTuts |

    6 Temmuz 2011
  • wafflepwn

    wafflepwn

    14 AĞUSTOS 2008