旋转任何没有拉链功能的多维列表

时间:2016-01-18 16:36:28

标签: python list python-3.x

如何在不使用zip功能的情况下旋转多维List,我有这个列表(但它可以更长):

testlist = [[1, 2, 3],
           [4, 5, 6],
           [7, 8, 9],
           [10,11,12]]

我想将其顺时针旋转90度,逆时针旋转90度。 ps:我不想使用zip的原因是因为这是一个家庭作业,我必须用香草蟒蛇写它。

4 个答案:

答案 0 :(得分:2)

当然,旋转多维列表的正确方法是在反向列表上使用 q。我假设你已经在其他问题中找到了这个:

zip

如果您不想这样做(并且也不想要其他内置函数),您基本上必须复制 zip的行为。以一种非常简单的形式(例如,假设所有列表具有相同的长度),您可以在嵌套列表理解中执行此操作。请记住也要旋转列表:

>>> testlist = [[1, 2, 3],
                [4, 5, 6],
                [7, 8, 9],
                [10,11,12]]

>>> list(zip(*testlist[::-1]))
[[10, 7, 4, 1], [11, 8, 5, 2], [12, 9, 6, 3]]

显然,使用>>> [[x[i] for x in testlist[::-1]] for i in range(len(testlist[0]))] [[10, 7, 4, 1], [11, 8, 5, 2], [12, 9, 6, 3]] 更清晰,更不容易出错。当然,你也可以使用两个嵌套循环将它扩展到几行。逆时针旋转90度也可以作为读者的练习。

答案 1 :(得分:0)

你的代码就像:

>>> import numpy as np
>>> s = np.array([[1,2,3], [4,5,6], [7,8,9]], int)
>>> s
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
>>> np.rot90(s)
array([[3, 6, 9],
       [2, 5, 8],
       [1, 4, 7]])
>>> np.rot90(s, 3) # Rotate counterclockwise 3 times
array([[9, 8, 7],
       [6, 5, 4],
       [3, 2, 1]])

答案 2 :(得分:0)

我假设你的意思是转置。

这个怎么样?

import numpy as np
a=np.array(testlist)
print a.T #this is a view

答案 3 :(得分:0)

既然你已经说过要做作业,我会给你步骤,但不是代码。

旋转90

  1. 每行成为一列(您可以使用2 for for loops and enumerate)
  2. 行的反向顺序(您可以使用带有负步的切片)
  3. 旋转-90

    1. 旋转90 的每一行都会成为一个列(2代表循环和枚举)
    2. 行的反向顺序(带有负步骤的切片)