跌跌撞撞製造二維list

閱讀時間約 2 分鐘
在武俠世界中,各門各派都有自己獨門的絕學。其實程式語言也一樣,每種程式語言也都有自己的一套。當然囉,武功絕學得好好保護,不可輕易外傳或被偷學;而程式語言呢,則是大家互相觀摩,互相漏氣求進步。所以啊,武功絕學就一個一個失傳,而程式語言則是互相吸取優點,越來越進步。
comprehension應該可說是Python的絕學之一吧。不過既然是絕學,總是會有讓人容易在運氣時一個不小心走錯經脈的地方。現在我需要一個二維的list,利用comprehension來造一個,應該是再好不過的選擇。只是這地方,就是個容易出錯的地方。
一開始是這麼寫的:
universe = [[0 for x in range(width)] for y in range(height)]
這個寫法ok,只是覺得有點囉唆。後來想到這樣寫:
universe = [[0]*width]*height
嘿!清爽多了,不是嗎?實際執行看看,的確印出來的,就是個塞滿0的二維list。這時候還真是有點佩服自己,能把原來囉哩囉唆的寫法,給改寫成這麼簡潔的寫法。
在繼續往下寫之前,想到好像在官網的文件上,曾經看到有關多維list的主題。會不會有更好的寫法?嗯!應該先看看再繼續。果然!在Programming FAQ裡頭,就有一個主題是在講如何造多維list。
呃……好吧!上面比較短的寫法是錯的。因為用「*」來複製list所得到的,是指向現存物件的reference,而不是真正的list物件。所以啊,「*height」所造出來的,是一個list,這個list含有height個reference,而這些reference都指向同一個長度為width的list。所以當改變universe裡頭某列元素的值時,每一列相同位置的元素都會被改掉。所以正確的寫法應該長這樣:
universe = [[0]*width for y in range(height)]
在其他網站看到,在迴圈部分,也可以寫成這樣:
universe = [[0]*width for _ in range(height)]
這個寫法倒沒什麼太特別的技術原因,純粹就是寫作風格而已。底線(underscore)代表的是:這個東東的值沒啥重要的,在迴圈裡頭也不會用到,不值得在意。既然這樣,那就用底線代替y,省得以後看程式時,會懷疑y是真的沒用到,還是寫錯、漏掉了。這主意不錯!可以避免一些麻煩,也讓程式讀起來更明確。寫程式時,如果能多考慮後續維護、除錯時的問題,就能節省很多時間,也能避免很多錯誤。就像地下管線要留人孔,方便維修;電線的地線、火線顏色不同,方便辨識一樣,寫程式時多費些心思,絕對是好處多多!
為什麼會看到廣告
15會員
116Content count
寫點東西自娛娛人
留言0
查看全部
發表第一個留言支持創作者!
ysf的沙龍 的其他內容
蝦蜜?!Python沒有內建array?!剛發現這件事時,還真的有點傻眼,怎麼會沒有array這麼好用的data type呢?
寫程式時,很傷腦筋的一件事,就是變數的名稱該怎麼取。其實變數名稱隨便取,並不會影響程式的正確性,但對程式的可讀性,以及後續的維護,那可就影響深遠了。
第一個要拿來練功的題目是:Game of Life。
呼!寫文章真是比寫程式還要燒腦、燒時間。一開始是沒想到要寫這「隨筆」的,是有天程式寫著寫著,腦海中就冒出這麼個想法來,要把跟Python交往的過程寫下來。
在看官網文件時,看到一份文件:PEP 8 -- Style Guide for Python Code。這份文件是關於Python程式碼風格的指引和建議。
讀完文件,接下來就是要動手了。第一步要先安裝Python。爬了些文,最後決定安裝Anaconda。
蝦蜜?!Python沒有內建array?!剛發現這件事時,還真的有點傻眼,怎麼會沒有array這麼好用的data type呢?
寫程式時,很傷腦筋的一件事,就是變數的名稱該怎麼取。其實變數名稱隨便取,並不會影響程式的正確性,但對程式的可讀性,以及後續的維護,那可就影響深遠了。
第一個要拿來練功的題目是:Game of Life。
呼!寫文章真是比寫程式還要燒腦、燒時間。一開始是沒想到要寫這「隨筆」的,是有天程式寫著寫著,腦海中就冒出這麼個想法來,要把跟Python交往的過程寫下來。
在看官網文件時,看到一份文件:PEP 8 -- Style Guide for Python Code。這份文件是關於Python程式碼風格的指引和建議。
讀完文件,接下來就是要動手了。第一步要先安裝Python。爬了些文,最後決定安裝Anaconda。
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
最近卯起來想整理繪本,又加上期末、暑假課程安排、家事不會變少的情況下,我的工作時間整個拉長,但是阿妮的 listening walk 是一定不會被犧牲的!只是,一旦要陪孩子散步,我的習慣是不催趕、認真做當下的陪伴,在時間不夠用的時候,listening walk 馬上升級為「listening ri
08/18/2014 2008年開始,受了Bucket List這部電影的影響。 我列了一個Bucket List。 所謂的Bucket List,是人生中想要完成的事。 一開始列了14項。 兩年後,2010年時,我又加列了3項。 那時,我總共完成了五項。 換句話說,用兩年的時間完成了
Thumbnail
已經好一陣子沒有追劇了,難得看到一部吸引我的台劇故事內容,趁著沒事的下午點開來看,是一部讓淚腺脆弱的我用掉許多衛生紙的影集。
Thumbnail
不管西方或東方,"心",在語言中都是表示我們想法存在的地方。那麼"腦"呢? 笛卡兒說 "我思故我在",所以人的思考記憶被儲存在網路雲端,或者某個晶球內繼續存在,也就被大家接受了。然而現代腦神經科學告訴我們,人的喜怒都跟大腦內分泌有關,可用藥物控制或斷層掃描觀察,"我"的存在似乎更接近唯物主義了。
筆者現年42歲,早期不懂投資,積攢的積蓄大多數是在銀行存款定存 早起的存款定存當然是比現在好很多,因緣際會下得知儲蓄險的報酬比定存好很多,於是又一股腦的將大部分的積蓄又投了進去,通常業務的說法就是保單具有複利效果,於是就很心動的買了美元及澳幣的儲蓄險,這邊提醒各位,關於這個投資決策,筆者犯了幾個錯
每天睡前滑手機,眼睜睜地看著倒數的日子 -1,總是有著又沮喪又想要無視的複雜心情。 早上起床,今天是難得的充滿著空檔的時間,本來應該有機會看完一講的函授的。但是從早上開始就一直提不起精神讀書,即使是想要拖延,想打發時間娛樂,其實也根本沒有什麼特別想看的東西,於是就在做各種家事、處理雜務,簡單小睡一下
Thumbnail
CBOT黃豆SX1期貨已跌到去年以來的低點,當然也摜破之前的支撐位階1270-1280美分。 咦,玉米與小麥沒有破底,反而略有小漲,這幾天黃豆究竟發生什麼事情呢?有貓膩?
Thumbnail
今天大有稍微出量下殺,可能會引發後續更大量的下殺,目前依舊以空手為優先考量。就算盤勢不好我們依舊來看看有什麼值得我們討論的吧~
Thumbnail
台股不論是加權還是櫃買,都是持續弱勢,下彎5日線不突破,下跌的趨勢就不會改變!
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
最近卯起來想整理繪本,又加上期末、暑假課程安排、家事不會變少的情況下,我的工作時間整個拉長,但是阿妮的 listening walk 是一定不會被犧牲的!只是,一旦要陪孩子散步,我的習慣是不催趕、認真做當下的陪伴,在時間不夠用的時候,listening walk 馬上升級為「listening ri
08/18/2014 2008年開始,受了Bucket List這部電影的影響。 我列了一個Bucket List。 所謂的Bucket List,是人生中想要完成的事。 一開始列了14項。 兩年後,2010年時,我又加列了3項。 那時,我總共完成了五項。 換句話說,用兩年的時間完成了
Thumbnail
已經好一陣子沒有追劇了,難得看到一部吸引我的台劇故事內容,趁著沒事的下午點開來看,是一部讓淚腺脆弱的我用掉許多衛生紙的影集。
Thumbnail
不管西方或東方,"心",在語言中都是表示我們想法存在的地方。那麼"腦"呢? 笛卡兒說 "我思故我在",所以人的思考記憶被儲存在網路雲端,或者某個晶球內繼續存在,也就被大家接受了。然而現代腦神經科學告訴我們,人的喜怒都跟大腦內分泌有關,可用藥物控制或斷層掃描觀察,"我"的存在似乎更接近唯物主義了。
筆者現年42歲,早期不懂投資,積攢的積蓄大多數是在銀行存款定存 早起的存款定存當然是比現在好很多,因緣際會下得知儲蓄險的報酬比定存好很多,於是又一股腦的將大部分的積蓄又投了進去,通常業務的說法就是保單具有複利效果,於是就很心動的買了美元及澳幣的儲蓄險,這邊提醒各位,關於這個投資決策,筆者犯了幾個錯
每天睡前滑手機,眼睜睜地看著倒數的日子 -1,總是有著又沮喪又想要無視的複雜心情。 早上起床,今天是難得的充滿著空檔的時間,本來應該有機會看完一講的函授的。但是從早上開始就一直提不起精神讀書,即使是想要拖延,想打發時間娛樂,其實也根本沒有什麼特別想看的東西,於是就在做各種家事、處理雜務,簡單小睡一下
Thumbnail
CBOT黃豆SX1期貨已跌到去年以來的低點,當然也摜破之前的支撐位階1270-1280美分。 咦,玉米與小麥沒有破底,反而略有小漲,這幾天黃豆究竟發生什麼事情呢?有貓膩?
Thumbnail
今天大有稍微出量下殺,可能會引發後續更大量的下殺,目前依舊以空手為優先考量。就算盤勢不好我們依舊來看看有什麼值得我們討論的吧~
Thumbnail
台股不論是加權還是櫃買,都是持續弱勢,下彎5日線不突破,下跌的趨勢就不會改變!