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

更新於 發佈於 閱讀時間約 5 分鐘
蝦蜜?!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
15會員
131內容數
寫點東西自娛娛人
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
ysf的沙龍 的其他內容
寫程式時,很傷腦筋的一件事,就是變數的名稱該怎麼取。其實變數名稱隨便取,並不會影響程式的正確性,但對程式的可讀性,以及後續的維護,那可就影響深遠了。
第一個要拿來練功的題目是:Game of Life。
呼!寫文章真是比寫程式還要燒腦、燒時間。一開始是沒想到要寫這「隨筆」的,是有天程式寫著寫著,腦海中就冒出這麼個想法來,要把跟Python交往的過程寫下來。
在看官網文件時,看到一份文件:PEP 8 -- Style Guide for Python Code。這份文件是關於Python程式碼風格的指引和建議。
讀完文件,接下來就是要動手了。第一步要先安裝Python。爬了些文,最後決定安裝Anaconda。
學程式最怕的,就是抱著書猛啃,把書背得滾瓜爛熟,真正要寫的時候,反而一行都寫不出來。
寫程式時,很傷腦筋的一件事,就是變數的名稱該怎麼取。其實變數名稱隨便取,並不會影響程式的正確性,但對程式的可讀性,以及後續的維護,那可就影響深遠了。
第一個要拿來練功的題目是:Game of Life。
呼!寫文章真是比寫程式還要燒腦、燒時間。一開始是沒想到要寫這「隨筆」的,是有天程式寫著寫著,腦海中就冒出這麼個想法來,要把跟Python交往的過程寫下來。
在看官網文件時,看到一份文件:PEP 8 -- Style Guide for Python Code。這份文件是關於Python程式碼風格的指引和建議。
讀完文件,接下來就是要動手了。第一步要先安裝Python。爬了些文,最後決定安裝Anaconda。
學程式最怕的,就是抱著書猛啃,把書背得滾瓜爛熟,真正要寫的時候,反而一行都寫不出來。
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
Convert 1D Array Into 2D Array 給定一個一維輸入陣列,請轉換成高度為m*寬度為n的二維陣列, 以二維陣列的形式輸出。 如果無法轉換,請輸出空陣列。
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
Thumbnail
題目敘述 Kth Distinct String in an Array 給定一個輸入陣列arr 和 參數k 請返回第k個出現恰好一次的陣列元素。
Thumbnail
題目敘述 Make Two Arrays Equal by Reversing Subarrays 題目給定兩個輸入陣列,請問能否透過子陣列的反轉讓兩個陣列相等? 子陣列的反轉操作次數不受限制。 如果可以,返回True 如果不行,返回False
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
Thumbnail
題目敘述 Sort Array by Increasing Frequency Leetcode #1636 給定一個輸入陣列,請依照出現頻率的多寡從低頻到高頻排列陣列元素。 如果有兩個元素的出現頻率相同,依照元素大小從大到小排列。 測試範例 Example 1: Input: nums
Thumbnail
Python擁有便攜性和通用性,適用於多種場景,同時具有全球通用性。Python在科技製造業、資料分析、人工智慧等領域有廣泛應用,對於理工科背景者而言有獨特的優勢。透過在線課程、自學書籍、實作專案,以及參與社群和開源專案,理工背景者可以達成從轉職進入Python程式領域的目標。
Thumbnail
題目敘述 Intersection of Two Arrays II 給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。 測試範例 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] 交集元素
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
在不需要認識01010就可以創造出網頁、網際網路、遊戲、應用程式的時代裡 下個時代可以不需要學程式碼就可以創造出「新文明」之建設條件,會是什麼? 本喵覺得,就是像01010轉變成程式碼那樣的"包裝技術" 以本喵的認知,只知道是模組化、容器化這類的內容有機會達到 每樣事物都是一個個的模
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
Convert 1D Array Into 2D Array 給定一個一維輸入陣列,請轉換成高度為m*寬度為n的二維陣列, 以二維陣列的形式輸出。 如果無法轉換,請輸出空陣列。
Thumbnail
從範例學python的目標讀者: 針對剛進入的初學者,想學習Python語言。 有基礎本數學邏輯基礎即可。 從小遊戲學python的目標讀者: 針對已經有經驗的C/C++, Python, 或其他有程式基礎的讀者。 想實作一些小專案,從實做中學習如何分析需求、元件分拆、到底層實作
Thumbnail
題目敘述 Kth Distinct String in an Array 給定一個輸入陣列arr 和 參數k 請返回第k個出現恰好一次的陣列元素。
Thumbnail
題目敘述 Make Two Arrays Equal by Reversing Subarrays 題目給定兩個輸入陣列,請問能否透過子陣列的反轉讓兩個陣列相等? 子陣列的反轉操作次數不受限制。 如果可以,返回True 如果不行,返回False
Thumbnail
Array可以說是各種語言除了基本型別之外,最常用的資料型別與容器之一了。 Array 這種連續格子狀的資料結構,在Python要怎麼表達呢? 建立一個空的陣列 最簡單也最直接的寫法就是 array = [] # Python list [] 就對應到大家熟知的array 陣列型態的資料結
Thumbnail
題目敘述 Sort Array by Increasing Frequency Leetcode #1636 給定一個輸入陣列,請依照出現頻率的多寡從低頻到高頻排列陣列元素。 如果有兩個元素的出現頻率相同,依照元素大小從大到小排列。 測試範例 Example 1: Input: nums
Thumbnail
Python擁有便攜性和通用性,適用於多種場景,同時具有全球通用性。Python在科技製造業、資料分析、人工智慧等領域有廣泛應用,對於理工科背景者而言有獨特的優勢。透過在線課程、自學書籍、實作專案,以及參與社群和開源專案,理工背景者可以達成從轉職進入Python程式領域的目標。
Thumbnail
題目敘述 Intersection of Two Arrays II 給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。 測試範例 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] 交集元素
Thumbnail
Python的模組和庫是可重用的程式碼塊,可透過import語句引入。特定部分可以透過from和import引入,並可使用as指定別名。第三方模組可透過pip工具安裝並在程式碼中使用。此外,也可以創建自定義模組並在其他Python文件中引用。
在不需要認識01010就可以創造出網頁、網際網路、遊戲、應用程式的時代裡 下個時代可以不需要學程式碼就可以創造出「新文明」之建設條件,會是什麼? 本喵覺得,就是像01010轉變成程式碼那樣的"包裝技術" 以本喵的認知,只知道是模組化、容器化這類的內容有機會達到 每樣事物都是一個個的模