为什么我的while循环在一轮之后结束?

jam*_*sel 0 python function while-loop

def transpose(matrix):
    n=0
    while n < (len(matrix)):
        li = []
        for sets in matrix:
            li.append(sets[0])
        n += 1
        print(len(matrix))
        return li
transpose([[1,2,3],[4,5,6],[7,8,9]])
Run Code Online (Sandbox Code Playgroud)

目前返回[1,4,7]通缉结果[[1,4,7],[2,5,8],[3,6,9]]

Mos*_*oye 6

你的内容中有一个return语句,所以函数一旦到达那个点就会返回.你应该你的回归与时间相同:

def transpose(matrix):
    n = 0
    li = []
    while n < (len(matrix)):
        ...
    return li
Run Code Online (Sandbox Code Playgroud)

您还可以n使用迭代的for循环替换while循环和计数器,range(len(matrix))以便可以安全地丢弃n,然后li在循环外部移动初始化:

def transpose(matrix):
    li = []
    for i in range(len(matrix)):
        inner_li = []
        for sets in matrix:
            inner_li.append(sets[i])
        li.append(inner_li)
    return li
Run Code Online (Sandbox Code Playgroud)

我建议您采用流行的配方来转置矩阵,以使代码更清晰:

def transpose(matrix):
    return list(zip(*matrix))
Run Code Online (Sandbox Code Playgroud)
>>> transpose([[1,2,3],[4,5,6],[7,8,9]])
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
Run Code Online (Sandbox Code Playgroud)