[問題] 數據結構與演算法的學習與coding習慣雜問

看板Python作者 (souhang)時間2年前 (2021/09/26 20:38), 2年前編輯推噓12(12044)
留言56則, 11人參與, 2年前最新討論串1/1
前言(廢話): 各位安安, 小弟之前有接觸過一咪咪autohotkey,因為最近找到了coding的樂趣, 開始透過youtube學習python,大概學到了用class建立對象與方法, 但一些很簡單的內置函數也都是看到別人用,才會知道有這東西。 在學習的過程中,我知道了leetcode這玩意,並在解題思路的幫助下,解出了第一題。 但到了第二題才發現,leetcode的入場門票是需要會數據結構與演算法, 這是我發文的主要原因。 以下問題: 1.數據結構與演算法資源推薦(中文偏好) 目前自己找到的資源,要嘛跟講得天書一樣難, 要嘛聽懂的卻又沒有code給我看實際到底長怎樣,有點難過 2.加强基礎的練習資源推薦 幫助手冊能教我如何使用,但如何運用或許就要透過刷題來學習了, 我知道leetcode和zerojudege,前者還不是我目前能面對的, 後者我也正在刷,只是想知道除了這些還有沒有其他推薦。 不限於刷題資源,教學文章、影片也可以(我覺得可以挑戰一下英文) 3.如何避免迴圈内的迴圈(for中for的改寫) 有時候會在for循環中再加入for循環,如果是一個兩個看起來還好, 但如果多起來的話,感覺邏輯上就會變得難釐清。 如果以下面的code來説的話),要如何避開或改善這個問題。 4.其他改善(同樣的code) 這部分像是註解、變數命名等等,因為沒參與過別人的開源項目, 也不知道怎麼做才是對其他開發人員友善,但又想早點培養習慣, 想來想去好像獻醜是最直接有效的改善方法, 如果在能力範圍內做得不夠好的話,希望各位能夠提點一下。 問完了,謝謝各位 這部分是code: # 給定一個整數數組 nums 和一個整數目標值 target,請你在該數組中找出 和為目標 值 target 的那 兩個 整數,並返回它們的數組下標。 # 你可以假設每種輸入只會對應一個答案。但是,數組中同一個元素在答案裡不能重複出 現。 # 你可以按任意順序返回答案。 class Solution: def twoSum(self, nums: list[int], target: int) -> list[int]: """ 功能: 從列表中找尋二者之和與目標值相同的數,返回他們在列表中的位置 ------------ 參數: nums: 數字所在的列表 target: 目標值 ------------ 變數: numsLen: 列表nums的長度: len(nums) num1Locat: num1的位置: in range(numsLen) num1: 第一個找到的數: nums[num1Locat] num2Locat: num2的位置: in range(num1Locat + 1, numsLen) num2: 第二個找到的數: nums[num2Locat] ------------ 返回值: result: 結果: [num1Locat, num2Locat] """ numsLen = len(nums) for num1Locat in range(numsLen): num1 = nums[num1Locat] for num2Locat in range(num1Locat + 1, numsLen): num2 = nums[num2Locat] if num1 + num2 == target: result = [num1Locat, num2Locat] return result # testNums = [1, 3, 6, 7, 8, 11] # testTarget = 19 # test = Solution() # testResult = test.twoSum(testNums, testTarget) # print(testResult) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.246.44.39 (澳門) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1632659900.A.BCA.html

09/26 21:03, 2年前 , 1F
針對問題1跟2,特別是「聽懂的卻又沒有code給我看」這句,
09/26 21:03, 1F

09/26 21:04, 2年前 , 2F
其實就是你根本的程式邏輯跟語言熟練度不夠的問題了。基本
09/26 21:04, 2F

09/26 21:05, 2年前 , 3F
上應該要往「理解的概念就要能夠轉換為程式」前進
09/26 21:05, 3F

09/26 21:05, 2年前 , 4F
就好像腦中的想法能轉換為英文講出口,才叫做會英文
09/26 21:05, 4F
謝謝您的建議,給了我很大的啟發

09/26 21:22, 2年前 , 5F
回第一個問題,我當時在學資料結構,書是使用C++當範例,其
09/26 21:22, 5F

09/26 21:22, 2年前 , 6F
實資料結構沒有一定要用哪種語言實作,所以沒有一定要用Pyt
09/26 21:22, 6F

09/26 21:22, 2年前 , 7F
hon來實作,個人建議學C/C++的資料結構,Python可以自行領
09/26 21:22, 7F

09/26 21:22, 2年前 , 8F
09/26 21:22, 8F
的確,我只有在python範圍內找資源,聽您這樣說,我也打算試一試

09/26 21:27, 2年前 , 9F
回第三個問題,iterative 本身跟 recursive 可以互換,但是
09/26 21:27, 9F

09/26 21:27, 2年前 , 10F
兩個for其實也還好
09/26 21:27, 10F
謝謝關鍵字,原來手冊上有,但一直沒去學XD

09/26 21:42, 2年前 , 11F
回第二題(抱歉跳著回答),若是為了以後薪水著想,英文能力
09/26 21:42, 11F

09/26 21:42, 2年前 , 12F
> 專業(硬體)知識 > coding能力,基本上,如果您英文新
09/26 21:42, 12F

09/26 21:42, 2年前 , 13F
多益有900分以上,這輩子大概就不愁吃穿了。另外,程式語言
09/26 21:42, 13F

09/26 21:42, 2年前 , 14F
請不要執著於Python, 在台灣都還是跟硬體較相關,薪水較高
09/26 21:42, 14F

09/26 21:42, 2年前 , 15F
09/26 21:42, 15F
很棒的建議,我確實對programer有點想法,也打算在python用得更熟練一點後,再往更底 層的語言學習,我會好好考慮的

09/26 21:47, 2年前 , 16F
回第四題,一般來說公司會訂coding style, 例如tab 要用4個
09/26 21:47, 16F

09/26 21:47, 2年前 , 17F
space來取代,名稱要用匈牙利命名法 還是要用 駱駝命名法…
09/26 21:47, 17F
那看起來真的要實際參與專案再來研究了XD

09/26 22:35, 2年前 , 18F
有關第四點可以參考PEP8
09/26 22:35, 18F
謝謝,很棒的指南 ※ 編輯: souhang (60.246.44.39 澳門), 09/26/2021 22:37:06 ※ 編輯: souhang (60.246.44.39 澳門), 09/26/2021 22:40:30

09/26 23:07, 2年前 , 19F
leetcode有分難度吧,難的先跳過不用客氣
09/26 23:07, 19F

09/27 01:48, 2年前 , 20F
基本功練好、觀念正確比較重要。不要禁不起誘惑只刷題練面
09/27 01:48, 20F

09/27 01:48, 2年前 , 21F
試,不然大學資工系沒有存在的道理。
09/27 01:48, 21F

09/27 01:49, 2年前 , 22F
python普遍上應該是snake命名+4空格,但還是看專案或公司
09/27 01:49, 22F

09/27 01:49, 2年前 , 23F
,沒有硬性規定。風格上可以看pep8
09/27 01:49, 23F

09/27 01:51, 2年前 , 24F
程式語言不是問題,選個舒服的入門就好。姿態正確了學新語
09/27 01:51, 24F

09/27 01:51, 2年前 , 25F
言也是幾周的事(撇開fp)。
09/27 01:51, 25F

09/27 13:52, 2年前 , 26F
多益 900 以上就不愁吃穿我怎麼沒感受到這件事...
09/27 13:52, 26F

09/27 14:29, 2年前 , 27F
所以樓上沒死啊 XD
09/27 14:29, 27F

09/27 14:46, 2年前 , 28F
不愁吃穿,最低限度來講,就是沒餓死沒凍死的意思 XD
09/27 14:46, 28F

09/27 17:42, 2年前 , 29F
沒有多益也沒關係,洗個四大文組就能當碼農了
09/27 17:42, 29F

09/27 17:42, 2年前 , 30F
還有我第一次看到不愁吃穿是這樣解釋的,真神人!
09/27 17:42, 30F

09/27 20:27, 2年前 , 31F
咳咳,英文強到一個程度,在業界真的有很大的好處,至少可
09/27 20:27, 31F

09/27 20:27, 2年前 , 32F
以到普遍福利比較好的外商。
09/27 20:27, 32F

09/27 22:12, 2年前 , 33F
英文好對找資料很有用 而且也有利進外商 非常值得投資
09/27 22:12, 33F

09/28 01:14, 2年前 , 34F
近期收到夯特給的JD 必須英文溝通的團隊年薪多約20~30萬
09/28 01:14, 34F

09/28 01:15, 2年前 , 35F
而且都是在台灣的遠端缺
09/28 01:15, 35F

09/28 01:19, 2年前 , 36F
回一下原PO 1.leetcode的話看討論區 會說是用什麼演算法
09/28 01:19, 36F

09/28 01:20, 2年前 , 37F
跟資料結構 有名詞再去google
09/28 01:20, 37F

09/28 01:21, 2年前 , 38F
2.跟著專案練習
09/28 01:21, 38F

09/28 01:23, 2年前 , 39F
3.不一定是需要避免的 重點是可讀性跟效率
09/28 01:23, 39F

09/28 01:24, 2年前 , 40F
4.我之前是參考google python coding style 但重點還是跟
09/28 01:24, 40F

09/28 01:24, 2年前 , 41F
團隊配合 通常沒有一定 但好的命名通常需要有良好的英文
09/28 01:24, 41F

09/28 01:25, 2年前 , 42F
書寫能力 這部分也可以參考軟體版之前關於命名的討論
09/28 01:25, 42F

09/28 01:26, 2年前 , 43F
[心得][英文] 如何命名... 系列文
09/28 01:26, 43F

09/28 01:32, 2年前 , 44F
另外註解建議用英文 開源社群不是只有華人
09/28 01:32, 44F

09/28 08:28, 2年前 , 45F
阿這不就是第一題嗎?我有看過一個做法是另外做一個 li
09/28 08:28, 45F

09/28 08:28, 2年前 , 46F
st 出來,裡面放的是原本給的 list 跟 target 的差,因
09/28 08:28, 46F

09/28 08:28, 2年前 , 47F
為題目限制的關係,新舊 list 只有一個重複的。
09/28 08:28, 47F

09/28 08:28, 2年前 , 48F
類似這樣去最佳化算法。
09/28 08:28, 48F

09/28 13:12, 2年前 , 49F
呃,英文學好有好處是沒錯,但把不愁吃穿這樣解的,問題可
09/28 13:12, 49F

09/28 13:12, 2年前 , 50F
能在中文啊XDDD
09/28 13:12, 50F

09/28 13:13, 2年前 , 51F
底層DS跟演算法確實從C/C++之類的找資源會比較多,Python
09/28 13:13, 51F

09/28 13:14, 2年前 , 52F
說真的因為script語言易用的取向,相對不會去重刻底層基礎
09/28 13:14, 52F

09/28 13:15, 2年前 , 53F
DS了,都拿寫好的用較多。當然要用得好或必要時動手改,
09/28 13:15, 53F

09/28 13:15, 2年前 , 54F
基礎還是得打好的。
09/28 13:15, 54F

09/29 18:07, 2年前 , 55F
演算法有時候會用虛擬碼描述,你自己要培養把虛擬碼寫成
09/29 18:07, 55F

09/29 18:07, 2年前 , 56F
可以跑的程式的功力
09/29 18:07, 56F
文章代碼(AID): #1XK6cylA (Python)
文章代碼(AID): #1XK6cylA (Python)