a,b=map(int,input().split())
c=0
if a>b :
c=a
else:
c=b
array=[[0]*c]*c
output=[[0]*c]*c
for i in range(a):
array[i]=list(map(int,input().split()))
for i in range(c):
for j in range(c):
output[j][i]=array[i][j]
for i in range(b):
for j in range(a):
print(output[i][j],end=" ")
print()
求路過的大大幫我看一下到底bug在哪裡
output=[[0]*c]*c
問題出在這一行,二維list這樣會出問題,因為list乘數字事實上並不是產生c個數字,而是通通指向同一個地方。所以你修改了其中一個數字,其他數字也會跟著變化。
你可以看這個網頁,講得很清楚:https://www.geeksforgeeks.org/python-using-2d-arrays-lists-the-right-way/
可以改成
output = [[0] * c for x in range(c)]
output=[[0]*c]*c
問題出在這一行,二維list這樣會出問題,因為list乘數字事實上並不是產生c個數字,而是通通指向同一個地方。所以你修改了其中一個數字,其他數字也會跟著變化。你可以看這個網頁,講得很清楚:https://www.geeksforgeeks.org/python-using-2d-arrays-lists-the-right-way/
可以改成
output = [[0] * c for x in range(c)]
謝謝您!!
output=[[0]*c]*c
問題出在這一行,二維list這樣會出問題,因為list乘數字事實上並不是產生c個數字,而是通通指向同一個地方。所以你修改了其中一個數字,其他數字也會跟著變化。你可以看這個網頁,講得很清楚:https://www.geeksforgeeks.org/python-using-2d-arrays-lists-the-right-way/
可以改成
output = [[0] * c for x in range(c)]
a,b=map(int,input().split())
c=0
if a>b :
c=a
else:
c=b
array=[[0] * c for x in range(c)]
output = [[0] * c for x in range(c)]
for i in range(a):
array[i]=list(map(int,input().split()))
for i in range(c):
for j in range(c):
output[j][i]=array[i][j]
for i in range(b):
for j in range(a):
print(output[i][j],end=" ")
print()
我剛剛稍微做了更動,卻發現還是無法AC,小的已經困惑兩天了,是不是我哪邊的語法又理解錯誤
array[i]=list(map(int,input().split()))
output[j][i]=array[i][j]
1. b<a時,array[i]的長度會小於c,造成array[i][j]超出list範圍2. 有多筆測資
原來!!
抱歉小弟我才學不久,對於輸入到list之中的方式還是不熟,目前我會的讀取方式都會讓它變成這樣
要怎麼讓它的預設值不更改,只改我所指定的array[i][j]呢?
array[i]=list(map(int,input().split()))
output[j][i]=array[i][j]
1. b<a時,array[i]的長度會小於c,造成array[i][j]超出list範圍2. 有多筆測資
原來!!抱歉小弟我才學不久,對於輸入到list之中的方式還是不熟,目前我會的讀取方式都會讓它變成這樣
要怎麼讓它的預設值不更改,只改我所指定的array[i][j]呢?
可以用array[i][0:b] = list(map(int, input().split())),就會只取代array[i][0]到array[i][b-1]的部分
不過這題也可以把後面for迴圈的範圍修改一下就不會有問題了