25

重複の可能性:
Pythonでリストを均等なサイズのチャンクに分割するにはどうすればよいですか?
python:「5,4,2,4,1,0」を[[5、4]、[2、4]、[1、0]]に変換します

[1,2,3,4,5,6,7,8,9]

->

[[1,2,3],[4,5,6],[7,8,9]]

'for'を明示せずにそれを行う簡単な方法はありますか?

4

5 に答える 5

67
>>> x = [1,2,3,4,5,6,7,8,9]
>>> zip(*[iter(x)]*3)
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]

zip(*[iter(s)]*n)Pythonではどのように機能しますか?

于 2012-04-28T14:28:52.050 に答える
15

サブ要素をリストとタプルにする必要がある場合:

In [9]: [list(t) for t in zip(*[iter(range(1,10))]*3)]
Out[9]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

または、によって切り捨てられる残りの要素を含める場合はzip、スライス構文を使用します。

In [16]: l=range(14)

In [17]: [l[i:i+3] for i in range(0,len(l),3)]
Out[17]: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10, 11], [12, 13]]
于 2012-04-28T17:09:23.837 に答える
10

ここでも使用できますnumpy.reshape

import numpy as np

x = np.array([1,2,3,4,5,6,7,8,9])

new_x = np.reshape(x, (3,3))

結果:

>>> new_x
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
于 2012-04-28T15:05:53.330 に答える
8
>>> map(None,*[iter(s)]*3)
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
于 2012-04-28T15:15:51.077 に答える
0

これは、再帰を使用してそれを行う「賢い」方法ではありません。

from itertools import chain

def groupsof(n, xs):
    if len(xs) < n:
        return [xs]
    else:
        return chain([xs[0:n]], groupsof(n, xs[n:]))

print list(groupsof(3, [1,2,3,4,5,6,7,8,9,10,11,12,13]))
于 2012-04-28T15:08:06.283 に答える