用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的沙龍
18會員
146內容數
寫點東西自娛娛人
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
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
沙龍一直是創作與交流的重要空間,這次 vocus 全面改版了沙龍介面,就是為了讓好內容被好好看見! 你可以自由編排你的沙龍首頁版位,新版手機介面也讓每位訪客都能更快找到感興趣的內容、成為你的支持者。 改版完成後可以在社群媒體分享新版面,並標記 @vocus.official⁠ ♥️ ⁠
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
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
時間不夠,結案又急 技術平台整個大改……..這種拼湊的日子,就算交得出結果 後面衍生的惡夢更多~ 我很小的時候,那時候華視晚上六點有播出卡通,無敵鐵金剛 因為年紀太小了,我不太記得劇情 印象中,這部卡通最傑出的創意,就是駕駛者必須跟機器人組合,才能操縱他。 結果更慘….. 冷涼卡好! 能怎樣呢?
Thumbnail
十幾年前還在上班累積操作資金的時候(沒辦法! 沒有富爸爸), 從事的是資料科學(data science)相關, 也是Oracle ERP的data architect, 並受過SAP Data Warehousing 模組的訓練
Thumbnail
十幾年前還在上班累積操作資金的時候(沒辦法! 沒有富爸爸), 從事的是資料科學(data science)相關, 也是Oracle ERP的data architect, 並受過SAP Data Warehousing 模組的訓練
Thumbnail
雖然不能說,每一個人都該學 Python。但對於那些沒學過程式語言、且不知道將來想走哪個資訊領域的初學者來說,Python 是這些人應該學的第一個語言,絕對當之無愧!
Thumbnail
雖然不能說,每一個人都該學 Python。但對於那些沒學過程式語言、且不知道將來想走哪個資訊領域的初學者來說,Python 是這些人應該學的第一個語言,絕對當之無愧!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News