从一个一维列表创建一个二维列表

25

我对Python有点陌生,想将一个一维列表转换为二维列表,给定这个matrixwidthlength

比如说我有一个list=[0,1,2,3],我想把它做成一个2*2的矩阵。

我应该如何从这个list中获取width=2,length=2的矩阵matrix [[0,1],[2,3]]


可能是重复问题 - https://dev59.com/NnA65IYBdhLWcg3wyRyk - m.brindley
3个回答

48

试试像这样:

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]]

另一个我为什么喜欢Python的例子!谢谢@root! - propjk007
3
在Python 3中,xrange被重命名为range - undefined
1
在Python 3中,xrange已被重命名为range - acmpo6ou

13

我认为你应该使用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,因为这会掩盖内置名称。

为什么使用NumPy比使用Root的方法更好? - PhoonOne
4
这取决于您需要2D结构用于哪些方面,但在几乎任何情况下,当您使用矩阵时,numpy都会更加高效、方便和灵活。 - wim
1
数值错误:无法将大小为1000000的数组重新塑形为形状(2,2)。 - Tedo Vrbanec

1

虽然不如您的代码那么优雅和具体,但您可以创建两个列表(包括每个其他整数),并将它们压缩/列成一个列表。

full_list = [0, 1, 2, 3]
list1 = []
list2 = []
for i in full_list:
  if i % 2 == 0:
    list1.append(i)
  else:
    list2.append(i)

zip_list = zip(list1, list2)
done = list(zip_list)

output:
[(0, 1), (2, 3)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接