[英]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.