0

私はリストを持っています

L = [1, 2, 3, 4...]

n*3要素を持っています。みたいなことができるようになりたい

for a, b, c in three_tuple_split(L)

pythonic の方法で、しかし 1 つを思い付くことができません。

4

3 に答える 3

3

非効率的だがpythonicな解決策:

for a, b, c in zip(*[iter(seq)]*3): pass

より効率的な実装については、itertools グルーパーのレシピをご覧ください。

from itertools import izip_longest

def grouper(n, iterable, fillvalue=None):
    "Collect data into fixed-length chunks or blocks"
    # grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

for a, b, c in grouper(3, seq):
    pass
于 2013-04-03T13:16:26.227 に答える
0

スライスと for ループを使用するだけです。

def break_into_chunks(l,n):
    x = len(l)
    step = x//n
    return [l[i:i+step] for i in range(0,x,step)]

または遅いもの:

def break_into_chunks(l,n):
    return [l[i:i+len(l)//n] for i in range(0,len(l),len(l)//n)]

使用するには:

for a, b, c in break_into_chunks(L,3):
于 2013-04-03T13:24:14.383 に答える
0
#!/usr/bin/env python
mylist = range(21)
def three_tuple_split(l):
    if len(l)%3 != 0:
        raise Exception('bad len')
    for i in xrange(0,len(l),3):
        yield l[i:i+3]
for a,b,c in three_tuple_split(mylist):
    print a,b,c
于 2013-04-03T13:23:19.003 に答える