作者souhang (souhang)
看板Python
标题[问题] 数据结构与演算法的学习与coding习惯杂问
时间Sun Sep 26 20:38:15 2021
前言(废话):
各位安安,
小弟之前有接触过一咪咪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://webptt.com/cn.aspx?n=bbs/Python/M.1632659900.A.BCA.html
1F:推 ddavid: 针对问题1跟2,特别是「听懂的却又没有code给我看」这句,09/26 21:03
2F:→ ddavid: 其实就是你根本的程式逻辑跟语言熟练度不够的问题了。基本09/26 21:04
3F:→ ddavid: 上应该要往「理解的概念就要能够转换为程式」前进09/26 21:05
4F:→ ddavid: 就好像脑中的想法能转换为英文讲出口,才叫做会英文09/26 21:05
谢谢您的建议,给了我很大的启发
5F:推 pmove: 回第一个问题,我当时在学资料结构,书是使用C++当范例,其09/26 21:22
6F:→ pmove: 实资料结构没有一定要用哪种语言实作,所以没有一定要用Pyt09/26 21:22
7F:→ pmove: hon来实作,个人建议学C/C++的资料结构,Python可以自行领09/26 21:22
8F:→ pmove: 悟09/26 21:22
的确,我只有在python范围内找资源,听您这样说,我也打算试一试
9F:推 pmove: 回第三个问题,iterative 本身跟 recursive 可以互换,但是09/26 21:27
10F:→ pmove: 两个for其实也还好09/26 21:27
谢谢关键字,原来手册上有,但一直没去学XD
11F:推 pmove: 回第二题(抱歉跳着回答),若是为了以後薪水着想,英文能力09/26 21:42
12F:→ pmove: > 专业(硬体)知识 > coding能力,基本上,如果您英文新09/26 21:42
13F:→ pmove: 多益有900分以上,这辈子大概就不愁吃穿了。另外,程式语言09/26 21:42
14F:→ pmove: 请不要执着於Python, 在台湾都还是跟硬体较相关,薪水较高09/26 21:42
15F:→ pmove: 。09/26 21:42
很棒的建议,我确实对programer有点想法,也打算在python用得更熟练一点後,再往更底
层的语言学习,我会好好考虑的
16F:→ pmove: 回第四题,一般来说公司会订coding style, 例如tab 要用4个09/26 21:47
17F:→ pmove: space来取代,名称要用匈牙利命名法 还是要用 骆驼命名法…09/26 21:47
那看起来真的要实际参与专案再来研究了XD
18F:推 Supershero: 有关第四点可以参考PEP809/26 22:35
谢谢,很棒的指南
※ 编辑: souhang (60.246.44.39 澳门), 09/26/2021 22:37:06
※ 编辑: souhang (60.246.44.39 澳门), 09/26/2021 22:40:30
19F:→ ck574b027: leetcode有分难度吧,难的先跳过不用客气 09/26 23:07
20F:推 aalexx: 基本功练好、观念正确比较重要。不要禁不起诱惑只刷题练面 09/27 01:48
21F:→ aalexx: 试,不然大学资工系没有存在的道理。 09/27 01:48
22F:→ aalexx: python普遍上应该是snake命名+4空格,但还是看专案或公司 09/27 01:49
23F:→ aalexx: ,没有硬性规定。风格上可以看pep8 09/27 01:49
24F:→ aalexx: 程式语言不是问题,选个舒服的入门就好。姿态正确了学新语 09/27 01:51
25F:→ aalexx: 言也是几周的事(撇开fp)。 09/27 01:51
26F:→ Hsins: 多益 900 以上就不愁吃穿我怎麽没感受到这件事... 09/27 13:52
27F:推 pmove: 所以楼上没死啊 XD 09/27 14:29
28F:推 pmove: 不愁吃穿,最低限度来讲,就是没饿死没冻死的意思 XD 09/27 14:46
29F:→ leolarrel: 没有多益也没关系,洗个四大文组就能当码农了 09/27 17:42
30F:→ leolarrel: 还有我第一次看到不愁吃穿是这样解释的,真神人! 09/27 17:42
31F:推 pmove: 咳咳,英文强到一个程度,在业界真的有很大的好处,至少可 09/27 20:27
32F:→ pmove: 以到普遍福利比较好的外商。 09/27 20:27
33F:推 s0914714: 英文好对找资料很有用 而且也有利进外商 非常值得投资 09/27 22:12
34F:→ sherees: 近期收到夯特给的JD 必须英文沟通的团队年薪多约20~30万 09/28 01:14
35F:→ sherees: 而且都是在台湾的远端缺 09/28 01:15
36F:推 sherees: 回一下原PO 1.leetcode的话看讨论区 会说是用什麽演算法 09/28 01:19
37F:→ sherees: 跟资料结构 有名词再去google 09/28 01:20
38F:→ sherees: 2.跟着专案练习 09/28 01:21
39F:→ sherees: 3.不一定是需要避免的 重点是可读性跟效率 09/28 01:23
40F:→ sherees: 4.我之前是参考google python coding style 但重点还是跟 09/28 01:24
41F:→ sherees: 团队配合 通常没有一定 但好的命名通常需要有良好的英文 09/28 01:24
42F:→ sherees: 书写能力 这部分也可以参考软体版之前关於命名的讨论 09/28 01:25
43F:→ sherees: [心得][英文] 如何命名... 系列文 09/28 01:26
44F:→ sherees: 另外注解建议用英文 开源社群不是只有华人 09/28 01:32
45F:→ GTR12534: 阿这不就是第一题吗?我有看过一个做法是另外做一个 li 09/28 08:28
46F:→ GTR12534: st 出来,里面放的是原本给的 list 跟 target 的差,因 09/28 08:28
47F:→ GTR12534: 为题目限制的关系,新旧 list 只有一个重复的。 09/28 08:28
48F:→ GTR12534: 类似这样去最佳化算法。 09/28 08:28
49F:推 ddavid: 呃,英文学好有好处是没错,但把不愁吃穿这样解的,问题可 09/28 13:12
50F:→ ddavid: 能在中文啊XDDD 09/28 13:12
51F:→ ddavid: 底层DS跟演算法确实从C/C++之类的找资源会比较多,Python 09/28 13:13
52F:→ ddavid: 说真的因为script语言易用的取向,相对不会去重刻底层基础 09/28 13:14
53F:→ ddavid: DS了,都拿写好的用较多。当然要用得好或必要时动手改, 09/28 13:15
54F:→ ddavid: 基础还是得打好的。 09/28 13:15
55F:→ mantour: 演算法有时候会用虚拟码描述,你自己要培养把虚拟码写成 09/29 18:07
56F:→ mantour: 可以跑的程式的功力 09/29 18:07
57F:推 pmove: 所谓食衣住行,之所以不说不愁住行,住指的是买房子,行指 10/02 20:19
58F:→ pmove: 的是买车子,这些都很花钱。而不愁吃穿,指的并不是财富自 10/02 20:19
59F:→ pmove: 由。撇开最低限度,不饿死不冻死。吃在古代是久久才吃肉, 10/02 20:19
60F:→ pmove: 你有办法餐餐吃肉,基本上是不愁吃了。穿在古代长袍马褂就 10/02 20:19
61F:→ pmove: 要穿很久,坏了也只能修修补补,不会买新衣服,你有够多的 10/02 20:19
62F:→ pmove: 衣服,基本上是不愁穿了。依这个标准,台湾很多人是不愁吃 10/02 20:19
63F:→ pmove: 穿的…不过考试的话,不愁吃穿,有可能是财富自由的意思 XD 10/02 20:19
64F:推 b10007034: 现在要改成不愁房车了吧 10/18 16:40
65F:→ b10007034: 不愁房房更好 10/18 16:40
66F:推 Schottky: 没想到在 Python 板可以看到各种不同语言的讨论 10/18 17:20