SORU
12 Ocak 2009, PAZARTESİ


En "pythonic" parçalar bir liste üzerinde yineleme yolu nedir?

Giriş olarak, aynı anda dört tamsayılar ile çalışmak için ihtiyacım olan tam listesini alır, bir Python komut dosyası var. Ne yazık ki, giriş kontrol yok, ya da dört-element dizilerini bir liste olarak geçmişimdir. Şu anda, bu şekilde yineleme ediyorum:

for i in xrange(0, len(ints), 4):
    # dummy op for example code
    foo  = ints[i] * ints[i   1]   ints[i   2] * ints[i   3]

"C-sanırım" beni bu durum ile ilgili daha pythonic bir yolu var şüpheli yapar. ama, çok benziyor Liste yineleme sonra atılır, korunmuş olmasına gerek yok yani. Bu daha iyi olur gibi bir şey olabilir mi?

while ints:
    foo  = ints[0] * ints[1]   ints[2] * ints[3]
    ints[0:4] = []

Hala oldukça "" doğru, ama hissetmiyorum. :-/

İlgili soru: How do you split a list into evenly sized chunks in Python?

CEVAP
12 Ocak 2009, PAZARTESİ


def chunker(seq, size):
    return (seq[pos:pos   size] for pos in xrange(0, len(seq), size))

Basit. Kolay. Hızlı. Herhangi bir dizi ile çalışır:

text = "I am a very, very helpful text"

for group in chunker(text, 7):
   print repr(group),
# 'I am a ' 'very, v' 'ery hel' 'pful te' 'xt'

print '|'.join(chunker(text, 10))
# I am a ver|y, very he|lpful text

animals = ['cat', 'dog', 'rabbit', 'duck', 'bird', 'cow', 'gnu', 'fish']

for group in chunker(animals, 3):
    print group
# ['cat', 'dog', 'rabbit']
# ['duck', 'bird', 'cow']
# ['gnu', 'fish']

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Charles Nesson

    Charles Ness

    27 NİSAN 2006
  • MofoHifi Records

    MofoHifi Rec

    15 HAZİRAN 2006
  • Xbox

    Xbox

    1 Kasım 2005