在Python中将1-D列表转换为2-D列表

时间:2014-10-29 17:34:32

标签: python

假设我有一个包含9个项目的列表, 我想将其转换为3个3项的列表

来自[1,2,3,4,5,6,7,8,9] - > [[1,2,3],[4,5,6],[7,8,9]]

这是代码:

def main():

    L = range(1,10)
    twoD= [[0]*3]*3     #creates [[0,0,0],[0,0,0],[0,0,0]]

    c = 0
    for i in range(3):
        for j in range(3):
            twoD[i][j] = L[c]

            c+=1

因某种原因返回

twoD = [[7, 8, 9], [7, 8, 9], [7, 8, 9]]

我不知道为什么,这是做什么的呢?

1 个答案:

答案 0 :(得分:0)

您可以使用以下列表理解。

>>> l = [1,2,3,4,5,6,7,8,9]
>>> [l[i:i+3] for i in range(0, len(l), 3)]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

更一般地说,你可以编写这样一个函数

def reshape(l, d):
    return [l[i:i+d] for i in range(0, len(l), d)]


>>> l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]

>>> reshape(l,3)
[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]]

>>> reshape(l,5)
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15]]