Создайте 2D-список из списка 1D

Я немного новичок в Python, и я хочу преобразовать 1D-список в 2D-список, учитывая width и length этого matrix.

Скажем, у меня есть list=[0,1,2,3], и я хочу создать матрицу 2 by 2 этого списка.

Как я могу получить matrix [[0,1],[2,3]] width= 2, length= 2 из list?

Ответ 1

Попробуйте что-то вроде этого:

In [53]: l = [0,1,2,3]

In [54]: def to_matrix(l, n):
    ...:     return [l[i:i+n] for i in xrange(0, len(l), n)]

In [55]: to_matrix(l,2)
Out[55]: [[0, 1], [2, 3]]

Ответ 2

Я думаю, вы должны использовать numpy, который предназначен для работы с матрицами/массивами, а не списком списков. Это будет выглядеть так:

>>> import numpy as np
>>> list_ = [0,1,2,3]
>>> a = np.array(list_).reshape(2,2)
>>> a
array([[0, 1],
       [2, 3]])
>>> a.shape
(2, 2)

Избегайте вызова переменной list, поскольку она затеняет встроенное имя.

Ответ 3

Для такой задачи можно использовать встроенную функцию изменения формы NumPy.

import numpy

length = 2
width = 2
_list = [0,1,2,3]
a = numpy.reshape(a, (length, width))
numpy.shape(a)

Пока вы изменяете значения в своем списке и соответственно обновляете значения 'length' и 'width', вы не должны получать никаких ошибок.