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

  • Jimmie Jones

    Jimmie Jones

    16 Kasım 2007
  • PhoneArena

    PhoneArena

    7 NİSAN 2006
  • WK

    WK

    9 Ocak 2006