#29909: 腦袋突然卡住


yudie (yudie)

學校 : 不指定學校
編號 : 179358
來源 : [111.82.240.237]
最後登入時間 :
2024-01-08 06:31:27
a015. 矩陣的翻轉 | From: [220.132.214.229] | 發表日期 : 2022-04-11 00:22

 

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在哪裡

 
#29911: Re:腦袋突然卡住


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a015. 矩陣的翻轉 | From: [39.9.100.103] | 發表日期 : 2022-04-11 09:31

 


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

 

 
#29918: Re:腦袋突然卡住


yudie (yudie)

學校 : 不指定學校
編號 : 179358
來源 : [111.82.240.237]
最後登入時間 :
2024-01-08 06:31:27
a015. 矩陣的翻轉 | From: [220.132.214.229] | 發表日期 : 2022-04-11 19:46

 


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

 

謝謝您!!

 
#29919: Re:腦袋突然卡住


yudie (yudie)

學校 : 不指定學校
編號 : 179358
來源 : [111.82.240.237]
最後登入時間 :
2024-01-08 06:31:27
a015. 矩陣的翻轉 | From: [220.132.214.229] | 發表日期 : 2022-04-11 20:09

 


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,小的已經困惑兩天了,是不是我哪邊的語法又理解錯誤

 
#29920: Re:腦袋突然卡住


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a015. 矩陣的翻轉 | From: [39.9.100.103] | 發表日期 : 2022-04-11 20:42

 

    array[i]=list(map(int,input().split()))

   


        output[j][i]=array[i][j]


1. b<a時,array[i]的長度會小於c,造成array[i][j]超出list範圍

2. 有多筆測資

 
#29921: Re:腦袋突然卡住


yudie (yudie)

學校 : 不指定學校
編號 : 179358
來源 : [111.82.240.237]
最後登入時間 :
2024-01-08 06:31:27
a015. 矩陣的翻轉 | From: [220.132.214.229] | 發表日期 : 2022-04-11 23:57

 

    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]呢?

 

 
#29922: Re:腦袋突然卡住


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [39.9.74.255]
最後登入時間 :
2024-10-14 22:20:08
a015. 矩陣的翻轉 | From: [39.9.100.103] | 發表日期 : 2022-04-12 08:20

 

    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迴圈的範圍修改一下就不會有問題了

 
ZeroJudge Forum