Задать вопрос
Pyrym
@Pyrym
Python 3 и PyQt5

Python. Как из списка сделать многомерный массив?

Подскажите, пожалуйста.
Есть список:
p = [1,2,3,4,5,6,7,8,9]
Как из него сделать массив:
[[1,2,3],
 [4,5,6],
 [7,8,9]]
  • Вопрос задан
  • 5356 просмотров
Подписаться 2 Оценить 3 комментария
Решения вопроса 3
aRegius
@aRegius
Python Enthusiast
[p[i:i+3] for i in range(0, 9, 3)]
Ответ написан
Комментировать
qlkvg
@qlkvg
python backend developer
Используйте numpy, если есть возможность
import numpy as np
arr = np.array([1,2,3,4,5,6,7,8,9])
arr.reshape(3,3)
Ответ написан
chupasaurus
@chupasaurus
Сею рефлекторное, злое, временное
q = []
for i in range(len(p)//3):
    q.append(p[i*3:i*3+3])

if len(p) % 3 > 0:
    q.append(p[-1*(len(p)%3):])
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
@deliro
def chunked(s, n):
    current = 0
    while True:
        chunk = s[current : current+n]
        current += n
        if chunk:
            yield chunk
        else:
            break


In [6]: list(chunked(p, 3))
Out[6]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]


Работает с последовательностями любой (в т.ч. неизвестной) длины (напр. QuerySet Django), дробит на чанки любой длины.
Ответ написан
Комментировать
@fdrwitch
ну, как бы по классике:
n, m = 3, 3 #n - строки
mat = [[ (j+ i*2 + i ) for j in range(1, m+1)] for i in range(n)]
mat
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Ответ написан
Комментировать
@abcd0x00
>>> p = [1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> it = iter(p)
>>> list(map(list, zip(it, it, it)))
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>>
Ответ написан
Комментировать
Pyrym
@Pyrym Автор вопроса
Python 3 и PyQt5
Можно чуть улучшить:
row = 3 # строк
col = int(len(p)/row) # столбцов

q = []
for i in range(len(p)//col):
    q.append(p[i*col:i*col+col])

if len(p) % col > 0:
    q.append(p[-1*(len(p)%col):])
print('q = ',q)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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