簡體   English   中英

為什么我的while循環在一輪后結束?

[英]Why does my while loop end after one round through?

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

當前返回[1,4,7]所需結果[[1,4,7],[2,5,8],[3,6,9]]

您在一段時間內就有了return語句,因此函數到達該點時將返回。 您應該自己的收益降低到與while相同的水平:

def transpose(matrix):
    n = 0
    li = []
    while n < (len(matrix)):
        ...
    return li

您還可以用在range(len(matrix))上進行迭代的for循環替換while循環和counter n ,以便可以安全地丟棄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

我建議您采用流行的方法來轉置矩陣,以使代碼更簡潔:

def transpose(matrix):
    return list(zip(*matrix))

>>> transpose([[1,2,3],[4,5,6],[7,8,9]])
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

縮進很重要。 另外,列表li被初始化在錯誤的位置。

def transpose(matrix):
    n=0
    li = []

    while n < (len(matrix)):
        for sets in matrix:
            li.append(sets[0])
        n += 1
        print(len(matrix))
    return li

我想您知道這一點,但以防萬一,可以使用numpy完成

import numpy as np
A = np.array([[1,2,3],[4,5,6],[7,8,9]])
print A.T

您的第一個錯誤是縮進return 第二個是sets[...]中的0而不是n 第三是在每個while循環中覆蓋li的值。 它是這樣工作的:

def transpose(matrix):
    n=0
    li = []
    while n < (len(matrix)):
        li.append([])
        for sets in matrix:
            li[-1].append(sets[n])
        n += 1
        print li
    return li


transpose([[1,2,3],[4,5,6],[7,8,9]])

不用擔心 如果您好奇並嘗試嘗試,您將變得更快,並且更少容易出錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM