Вопрос по python, list – Как разбить список питонов на куски одинакового размера? [Дубликат]

21

Possible Duplicate:
How do you split a list into evenly sized chunks in Python?
python: convert “5,4,2,4,1,0” into [[5, 4], [2, 4], [1, 0]]

<code>[1,2,3,4,5,6,7,8,9]
</code>

- & GT;

<code>[[1,2,3],[4,5,6],[7,8,9]]
</code>

Есть ли простой способ сделать это, без явного «для»?

Это былоasked before dawg
Что должно произойти, если количество элементов в списке не делится поровну на размер фрагмента? Tim Pietzcker

Ваш Ответ

5   ответов
61
>>> 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) work in Python?

Error: User Rate Limit ExceededevenError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededx = [1,2,3,4,5,6,7]Error: User Rate Limit Exceeded7Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
9

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]])
Error: User Rate Limit Exceeded
7
>>> map(None,*[iter(s)]*3)
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededmap(None, *[iter(range(10))]*3))Error: User Rate Limit Exceededzip(*[iter(range(10))]*3)Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededizip_longestError: User Rate Limit Exceededitertools
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]))
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]]
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы