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

  • boburnham

    boburnham

    11 Temmuz 2006
  • martin shervington

    martin sherv

    7 EKİM 2011
  • NightShader1

    NightShader1

    25 Temmuz 2006