我正在努力研究一个流行的python问题 - 旋转2D列表。给定list = [[1,2,3,4],[5,6,7,8],[12,13,14,15]]
。
我知道存在一个非常简单的解决方案:zip(*list[::-1]
。但我想创建自己的功能。所以我去了:
def flip(list):
output = []
temp = len(list)
for row in range(temp):
newlist = []
for col in range(temp):
newlist.append(list[col][temp - row - 1])
print list[col][temp - row -1]
output.append(newlist)
但这仅在我们有n*n
矩阵时才有效。如果我有一个m*n
矩阵,我应该改变什么。我在这做错了什么
答案 0 :(得分:3)
您正在使用temp = len(list)
作为两次迭代的上边界。 m×n矩阵当然需要不同的边界。
如果假设外部列表中的每个内部列表具有相同的长度,则可以先保存两个长度,然后迭代到这些大小:
m = len(list)
n = len(list[0])
答案 1 :(得分:0)
从原始列表中定义行和列长,然后创建。通过对代码进行一些更改,可以使用mxn。但是,如果内部列表的长度不同,则不起作用。 zip(* list [:: - 1])将使用最小长度的列表为您提供输出。您需要对此进行更多更改。
def flip(list):
output = []
rowLength = len(list)
colLength = len(list[0])
for row in range(colLength):
newlist = []
for col in range(rowLength):
newlist.append(list[col][row])
print list[col][row]
output.append(newlist)
return output