不使用zip函数旋转任何多维列表

2024-04-20 12:03:46 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我要顺时针旋转90度,也要逆时针旋转90度。 ps:我不想使用zip的原因是因为这是一个家庭作业,我必须用vanilla python编写它。在


Tags: 函数列表情况原因zipps家庭作业vanilla
3条回答

你的代码应该是:

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

我想你是说换位。在

这个怎么样?在

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

当然,旋转多维列表的正确方法是在反向列表上使用使用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]]

如果您不想这样做(也不想使用其他内置函数),那么您基本上必须复制zip的行为。以一种非常简单的形式(例如,假设所有列表的长度相同),您可以在嵌套列表理解中实现这一点。还记得旋转列表:

^{pr2}$

显然,使用zip更清晰,更不容易出错。当然,也可以使用两个嵌套循环将其分散到几行。在90度逆时针方向做同样的动作留给读者作为练习。在

相关问题 更多 >