用array還是list?要為了喝牛奶而養一頭牛嗎?

更新 發佈閱讀 6 分鐘

蝦蜜?!Python沒有內建array?!剛發現這件事時,還真的有點傻眼,怎麼會沒有array這麼好用的data type呢?

既然沒有內建array,那就找替代方案吧!替代方案有兩個,一個是用list,另一個是用array或numpy這兩個module。

根據官網的文件說明,list的time complexity和C、Pascal的array一樣,而array這個module所提供的method,在index的時候, 速度會比list稍慢。既然「稍慢」,那應該不會慢到像蝸牛散步這種讓人抓狂的慢才對。不過有一個官網沒提到的問題是,array這個module只能處理一維的array,而我需要的,是二維的array。把二維array轉成一維array來處理,對於被matlab蹂躪過的人來說,實在是小菜一碟。怎麼說呢?因為matlab的迴圈是出了名的慢,尤其是巢狀迴圈,那真的就是蝸牛散步了,所以遇到巢狀迴圈時,如果很在乎速度,都會想辦法減少迴圈的層數。處理二維array時,如果需要用到兩層迴圈,那就把二維array轉成一維array,這樣就不需要兩層迴圈了。當然啦,matlab提供了一些方便的function來處理這些問題,只是明明可以很直觀處理的問題,因為程式語言本身特性的關係,還必須花費額外的心力來搞這些有的沒有的,有時還真是讓人圈圈叉叉的,難怪現在程式語言越來越多,而且替換速度越來越快,畢竟要處理的問題越來越複雜,型態也越來越多樣化,順了姑意,逆了嫂意,沒法大家都滿意。

如果採用array這個module,那就要自己寫function來處理二維、一維array的轉換問題,這似乎不是個好主意。至於numpy這個module呢?看來是好用許多,寫起來應該會很順暢。不過……最後決定還是用list來寫。為什麼咧?其實原因很簡單,既然是剛開始學,那就該把基本內建的東西摸熟一點,所以除非萬不得已,就別用一些有的沒的module吧!

其實要不要用別人寫好的東西,是個很有趣的問題,仔細追究起來,跟工、商業上的許多發展軌跡與碰到的問題,還真是有著異曲同工之妙。

在以前open source還沒這麼遍地開花的年代,別人的東西就意味著白花花的銀子。所以囉,要不要為了喝牛奶而養一頭牛,就成了挺令人傷腦筋的問題。一切都自己來,好處是可以掌控全局,哪邊可能會有問題都一清二楚,品質掌握在自己手上,但缺點是要從頭做起,需要的時間長,能燒的鈔票要夠多,才能燒出結果。那如果用別人的東西呢?好處是,很多工作別人都做好了,不用自己來,開發時間可以縮短許多。缺點呢,就是外來的東西品質要如何確保,是個難題。還有啊,以後版本升級時,可能還要再花錢。還有啊,萬一它倒了怎麼辦?!還有啊,萬一它被其他公司買走,而買它的那家公司,收費、授權方式都改了,這時候怎麼辦?!萬萬萬一,買它的那家公司,居然就是你的競爭對手,那…… Java就是個活生生血淋淋的例子。Java原本是Sun的,然後Oracle買下了Sun。Google的Android用到Java,然後Oracle告Google。這裡頭牽扯到的授權問題複雜得很,雖然法院後來判Google勝訴,但誰也說不準接下來會不會有續集。

現在open source這麼多,只要遵守授權規定,白花花的銀子可以少花很多了,只是其他問題依舊存在。就拿品質來說吧,幾年前就發生過這麼一件事,沒記錯的話,應該是有隻非常多人用的程式發現了bug,引起了非常大的騷動。只是好玩的是,那隻程式短短的沒幾行,就只是處理簡單的字串而已,自己寫的話,也花不了幾分鐘。只是啊只是,大家現在都用別人的東西用習慣了,反正又不花錢,於是就連很基本隨手可以處理的問題,都要拿別人的東西來用,而且可能會毫無戒備的認為,這些大家都在用的東西一點問題都沒有,才會有這樣的事情發生。

想到工業界的例子。台積電,這個被吹捧為「護國神山」的大公司,就是靠著幫別人養牛的商業模式崛起的。原本的產業結構是一條龍全包式的,Intel就是這麼樣的一家公司。想要進入這樣的產業,除了銀子要比山高之外,還得要上、中、下游的技術全都具備,那可就不是一個「難」字可以形容的了。不過自從台積電搞了個晶圓代工的新商業模式之後,整個產業結構產生了很大的變化,IC設計公司也才如雨後春筍般出現,這些IC設計公司要是沒有晶圓代工廠幫忙,應該很多連出生的機會都沒有,更不要說像現在這麼會賺錢了。

說實在的,我覺得以投資人的眼光來看,公司就只有讓你賺錢的和讓你賠錢的這兩種,什麼「護國神山」,那是拿來矇人的。有再響亮的名號,如果不能讓你賺到錢,那就該棄之如敝屣,犯不著為了個別人吹噓出來的名號,和自己的銀子過不去。

總之,用與不用別人寫的東西,各有各的優缺點,就像解optimization的問題一樣,絕大部分都只能找到local optimum,很難有絕對的標準可以找到global optimum。所以囉,既然沒時間壓力,可以不講求效率,那能自己寫就自己寫,一杯咖啡、一曲音樂,零食…… 沒有,會肥!悠悠哉哉地享受寫程式的樂趣囉。

留言
avatar-img
留言分享你的想法!
avatar-img
ysf的沙龍
19會員
157內容數
寫點東西自娛娛人
ysf的沙龍的其他內容
2025/04/14
花了些時間,靜下心來,仔仔細細地研究了一番,總算把Python呼叫函數時引數的傳遞方式給徹底搞清楚了。
2025/04/14
花了些時間,靜下心來,仔仔細細地研究了一番,總算把Python呼叫函數時引數的傳遞方式給徹底搞清楚了。
2024/05/08
呼!折騰了好久,終於徹底搞清楚pygame的各個blend mode所用的計算式,到底是長啥樣子了。
2024/05/08
呼!折騰了好久,終於徹底搞清楚pygame的各個blend mode所用的計算式,到底是長啥樣子了。
2023/12/20
在寫《The Nature of Code閱讀心得筆記——使用Python實作》的[第四章]4.3節時,原書提到,在使用Java的ArrayList時,如果用迴圈一面走訪一面又移除其中的元素,那會有難以察覺的問題存在。寫個小程式測試的結果發現,Python的list也會有一樣的問題。
Thumbnail
2023/12/20
在寫《The Nature of Code閱讀心得筆記——使用Python實作》的[第四章]4.3節時,原書提到,在使用Java的ArrayList時,如果用迴圈一面走訪一面又移除其中的元素,那會有難以察覺的問題存在。寫個小程式測試的結果發現,Python的list也會有一樣的問題。
Thumbnail
看更多
你可能也想看
Thumbnail
為什麼要學Python? 我回不去了 全球工程師都在用! 根據 TIOBE調查 全球程式語言使用排名,Python連續好幾年第一名,代表最多人使用,選擇程式語言當然是要選最多人用的。 程式語言趨勢圖 Python可以做什麼? 這種事情問ChatGTP就好XD
Thumbnail
為什麼要學Python? 我回不去了 全球工程師都在用! 根據 TIOBE調查 全球程式語言使用排名,Python連續好幾年第一名,代表最多人使用,選擇程式語言當然是要選最多人用的。 程式語言趨勢圖 Python可以做什麼? 這種事情問ChatGTP就好XD
Thumbnail
俗話說「萬事起頭難」還真是一點也沒錯,從開始動筆寫《The Nature of Code閱讀心得筆記——使用Python實作》,到寫完頭一章,再到把文章放上網站開始發表,總共隔了快三個月的時間。
Thumbnail
俗話說「萬事起頭難」還真是一點也沒錯,從開始動筆寫《The Nature of Code閱讀心得筆記——使用Python實作》,到寫完頭一章,再到把文章放上網站開始發表,總共隔了快三個月的時間。
Thumbnail
「天啊!這程式怎麼這麼醜!」瞪著螢幕上先前寫的程式,不禁從心底冒出這樣的一句話。
Thumbnail
「天啊!這程式怎麼這麼醜!」瞪著螢幕上先前寫的程式,不禁從心底冒出這樣的一句話。
Thumbnail
Game of Life的輸出結果,也就是每代演化後universe的長相,程式要怎麼寫呢?現在有個二維list,裡頭放的是一堆0和1,要怎麼樣用西洋棋盤式的方式來顯示呢?這看來勢必得用到別人寫好的module來做,才能省時、省力又漂亮。第一個想到的,當然就是matplotlib這個科學繪圖用的mo
Thumbnail
Game of Life的輸出結果,也就是每代演化後universe的長相,程式要怎麼寫呢?現在有個二維list,裡頭放的是一堆0和1,要怎麼樣用西洋棋盤式的方式來顯示呢?這看來勢必得用到別人寫好的module來做,才能省時、省力又漂亮。第一個想到的,當然就是matplotlib這個科學繪圖用的mo
Thumbnail
comprehension應該可說是Python的絕學之一吧。不過既然是絕學,總是會有讓人容易在運氣時一個不小心走錯經脈的地方。現在我需要一個二維的list,利用comprehension來造一個,應該是再好不過的選擇。只是這地方,就是個容易出錯的地方。
Thumbnail
comprehension應該可說是Python的絕學之一吧。不過既然是絕學,總是會有讓人容易在運氣時一個不小心走錯經脈的地方。現在我需要一個二維的list,利用comprehension來造一個,應該是再好不過的選擇。只是這地方,就是個容易出錯的地方。
Thumbnail
蝦蜜?!Python沒有內建array?!剛發現這件事時,還真的有點傻眼,怎麼會沒有array這麼好用的data type呢?
Thumbnail
蝦蜜?!Python沒有內建array?!剛發現這件事時,還真的有點傻眼,怎麼會沒有array這麼好用的data type呢?
Thumbnail
很多文章都說未來是人工智慧的時代,程式語言是必備能力,靠著一時腦熱蒐集了許多資訊,我想說學習不用很厲害才開始,只要有興趣就開始吧,就算用不到也沒關係!
Thumbnail
很多文章都說未來是人工智慧的時代,程式語言是必備能力,靠著一時腦熱蒐集了許多資訊,我想說學習不用很厲害才開始,只要有興趣就開始吧,就算用不到也沒關係!
Thumbnail
時間不夠,結案又急 技術平台整個大改……..這種拼湊的日子,就算交得出結果 後面衍生的惡夢更多~ 我很小的時候,那時候華視晚上六點有播出卡通,無敵鐵金剛 因為年紀太小了,我不太記得劇情 印象中,這部卡通最傑出的創意,就是駕駛者必須跟機器人組合,才能操縱他。 結果更慘….. 冷涼卡好! 能怎樣呢?
Thumbnail
時間不夠,結案又急 技術平台整個大改……..這種拼湊的日子,就算交得出結果 後面衍生的惡夢更多~ 我很小的時候,那時候華視晚上六點有播出卡通,無敵鐵金剛 因為年紀太小了,我不太記得劇情 印象中,這部卡通最傑出的創意,就是駕駛者必須跟機器人組合,才能操縱他。 結果更慘….. 冷涼卡好! 能怎樣呢?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News