web-dev-qa-db-ja.com

一度に4項目のシーケンスを反復するPython的な方法

可能性のある複製:
チャンクでリストを反復する最も「Python的な」方法は何ですか?

ピクセルあたり4チャネルのPNGデータを読み込んでいます。一度に1ピクセルずつデータを反復処理したいと思います(つまり、4エレメントごとに1ピクセル、rgba)。

red_channel = 0
while red_channel < len(raw_png_data):
    green_channel, blue_channel, alpha_channel = red_channel +1, red_channel +2, red_channel +3
    # do something with my 4 channels of pixel data ... raw_png_data[red_channel] etc
    red_channel += 4

この方法は実際には「正しい」ようには見えません。一度に4項目のシーケンスを反復処理し、それらの4項目を解凍するよりPython的な方法はありますか?

33
blasted
vars = [1, 2, 3, 4, 5, 6, 7, 8]
for a, b, c, d in Zip(*[iter(vars)]*4):
    print a, b, c, d
23
Tomasz Wysocki
from itertools import izip
for r,g,b,a in izip(*[iter(data)]*4):
    ...
6
John La Rooy
for r, g, b, t in (data[i:i+4] for i in xrange(0, len(data)/4*4, 4)):
    print r, g, b, t
3
Sjoerd