列表迭代Python

时间:2014-11-11 19:35:19

标签: python

我正在努力研究一个流行的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矩阵,我应该改变什么。我在这做错了什么

2 个答案:

答案 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