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ş:
C bir Sözlük üzerinde yineleme için en...
&Quot;doğru" Ruby bir dizi sokman...
&Quot anlamı nedir;... ..." token...
&; En iyi" JavaScript global bir ...
NSDateFormatter yerel "özellik&qu...