猿问

旋转列表列表

m = [[5,9,1,8],

    [2,4,5,7],

    [6,3,3,2],

    [1,7,6,3]]


    rotated_map = []

    for i in range(len(m[0])):

      rotated_map.append([x[i] for x in m]) 

      print(rotated_map)


    """

    my result = [[5, 2, 6, 1], [9, 4, 3, 7], [1, 5, 3, 6], [8, 7, 2, 3]]


    desired result = [[8,7,2,3],

                      [1,5,3,6],

                      [9,4,3,7],

                      [5,2,6,1]]

    """

我试图通过首先将列表中的所有最后一个元素放入一个列表,然后将倒数第二个元素放入另一个列表来旋转列表,直到我到达第一个元素。


开心每一天1111
浏览 199回答 3
3回答

慕神8447489

使用 转置列表zip,然后使用语法将其反转[::-1]。>>> m = [[5, 9, 1, 8], [2, 4, 5, 7], [6, 3, 3, 2], [1, 7, 6, 3]]>>> list(map(list, zip(*m)))[::-1]>>> [[8, 7, 2, 3], [1, 5, 3, 6], [9, 4, 3, 7], [5, 2, 6, 1]]编辑:如果您想要漂亮的打印效果,最简单的方法可能是一直使用 numpy 数组。>>> import numpy as np>>> >>> m = [[5, 9, 1, 8], [2, 4, 5, 7], [6, 3, 3, 2], [1, 7, 6, 3]]>>> m = np.array(m)>>> m>>> array([[5, 9, 1, 8],       [2, 4, 5, 7],       [6, 3, 3, 2],       [1, 7, 6, 3]])>>> >>> m.T[::-1]>>> array([[8, 7, 2, 3],       [1, 5, 3, 6],       [9, 4, 3, 7],       [5, 2, 6, 1]])请注意,m并m.T[::-1]共享相同的数据,因为m.T[::-1]只是另一种观点的m。如果您需要复制数据,请使用result = m.T[::-1].copy()

侃侃无极

您可以使用 zip,使用 解压缩列表列表*,然后使用 反转结果[::-1]:m = [[5,9,1,8],    [2,4,5,7],    [6,3,3,2],    [1,7,6,3]]res = [list(i) for i in zip(*m)][::-1]>>> res[[8, 7, 2, 3], [1, 5, 3, 6], [9, 4, 3, 7], [5, 2, 6, 1]]如果numpy是一个选项,移调更容易:import numpy as np>>> np.transpose(m)[::-1]array([[8, 7, 2, 3],       [1, 5, 3, 6],       [9, 4, 3, 7],       [5, 2, 6, 1]])# or:>>> np.flip(np.transpose(m),0)array([[8, 7, 2, 3],       [1, 5, 3, 6],       [9, 4, 3, 7],       [5, 2, 6, 1]])

慕哥6287543

您可以使用numpy模块来做到这一点。它具有转置数组的属性。检查以下代码:import numpy as npm = [[5,9,1,8],    [2,4,5,7],    [6,3,3,2],    [1,7,6,3]]arr = np.array(m).transpose()new_list = []for i in range(arr.shape[0]-1,-1,-1):    new_list.append(list(arr[i]))print(new_list)输出:[[8, 7, 2, 3], [1, 5, 3, 6], [9, 4, 3, 7], [5, 2, 6, 1]]
随时随地看视频慕课网APP

相关分类

Python
我要回答