2009-04-16 20 views

答えて

36

zip()あなたの友達です:

def chunk(seq, n): 
    return [seq[i:i+n] for i in range(0, len(seq), n)] 

chunks= chunk(tuples, 2) 

それとも、あなたはイテレータを楽しむ場合:それは常に2ではないかもしれない場合

t = ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h') 
zip(t[::2], t[1::2]) 
+0

いいです! –

+1

+1です。私は[::]構文について知りませんでしたので、 –

+0

はtuple =( 'a'、 'b'、 'c'、 'd'、 'e'、 'f' '、' g '、' h '、' i ')#最後の' i 'をメモすると、タプルが奇数になります – dfa

15
[(tuple[a], tuple[a+1]) for a in range(0,len(tuple),2)] 
+0

+1範囲関数の明示的な使用 –

-1

はここで、任意のサイズのチャンクのための一般的なレシピです:

def iterchunk(iterable, n): 
    it= iter(iterable) 
    while True: 
     chunk= [] 
     try: 
      for i in range(n): 
       chunk.append(it.next()) 
     except StopIteration: 
      break 
     finally: 
      if len(chunk)!=0: 
       yield tuple(chunk) 
+2

範囲(0、len(seq))ではなく範囲(0、len(seq)、n)を意味すると思います。 – Noah

+0

-1:動作しません。 – nosklo

+0

ノア:確かに、タ。 – bobince

7

または(grouperためrecipe参照)itertoolsをINGの:

from itertools import izip 
def group2(iterable): 
    args = [iter(iterable)] * 2 
    return izip(*args) 

tuples = [ab for ab in group2(tuple)] 
+0

+1:ドキュメントに言及するために(あなたが最初に来た:) – tzot

0

Iはdfa's commentに対する応答としてPeter Hoffmann's answerに基づいて、このコードを提示します。

タプルの要素数が偶数であるかどうかに関係なく動作することが保証されています。タプル要素の偶数を有するか否かを動作することが保証されるよう

[(tup[i], tup[i+1]) for i in range(0, (len(tup)/2)*2, 2)] 

(len(tup)/2)*2範囲パラメータは、タプルの長さに最高偶数以下算出します。

このメソッドの結果はリストになります。これは、tuple()関数を使用してタプルに変換できます。

サンプル:それは組み込み関数のタプルを上書きするよう

def inPairs(tup): 
    return [(tup[i], tup[i+1]) for i in range(0, (len(tup)/2)*2, 2)] 

# odd number of elements 
print("Odd Set") 
odd = range(5) 
print(odd) 
po = inPairs(odd) 
print(po) 

# even number of elements 
print("Even Set") 
even = range(4) 
print(even) 
pe = inPairs(even) 
print(pe) 

出力

 
Odd Set 
[0, 1, 2, 3, 4] 
[(0, 1), (2, 3)] 
Even Set 
[0, 1, 2, 3] 
[(0, 1), (2, 3)] 
関連する問題