Python 里面列表、字典、集合的删除方法好难记啊

2022-09-17 21:15:26 +08:00
 usnake

大家都是怎么区分 pop popitem discard remove del 这些该用在什么地方的啊?

2981 次点击
所在节点    Python
18 条回复
filwaline
2022-09-17 21:23:48 +08:00
为毛要记忆这些东西,用到的时候靠 IDE 的补全提示就好了,要不就随手敲个 help ,再不济你还可以去看文档啊。
ytmsdy
2022-09-17 21:25:19 +08:00
要用的时候,临时搜索一下就好!不要太纠结于这些事情,用的多了,慢慢的就知道了。
我写 Python 都快 5 年了,有一些函数函数不记得。
LeeReamond
2022-09-17 21:26:43 +08:00
记不住建议回去重读 python 之禅,理解一下“最好只有一个最好的”是啥意思,然后你起码可以少记一些。。。剩下的,列表是一个逻辑上的栈,删除自然可以用 pop ,字典删除就是删除,这用记么。。
ysc3839
2022-09-17 21:37:46 +08:00
看文档
efaun
2022-09-17 21:49:56 +08:00
这就是我不喜欢 Python 的原因, 但又不得不用

像 java 哪个方法忘了或者不知道有什么方法可以用, 打个点 ide 就能提示出来, Python 打个点提示的都是些乱七八糟的玩意,提示的还不是这个函数的
aijam
2022-09-17 22:02:11 +08:00
好问题,因为他们语义不相同。
比如对 dict 来说,
+ pop(key, [default]),返回一个 key 对应的值,并把这个 key 移除。相对于 get(key, [default])方法。
+ popitem(),是移除并返回一个(key, value)对。相对于 items()方法。
+ del 是根据 key 删除
+ remove 是根据 value 删除,value 没找到会丢异常
然而对 set 来说,
+ pop()没有参数,只是返回删除任意值。
+ 那要删除一个特定的值的时候,就有了 discard(item)。
+ remove 同 dict 一样,会丢异常
+ 那想 remove 但是不需要丢异常就有了 discard 。
诸如此类,全记住意义不大,更需要记住的各个数据结构的本质和使用场景,需要的时候查一下方法就可以。
JasonLaw
2022-09-17 22:04:30 +08:00
@efaun #5 你知道为什么会出现“ Python 打个点提示的都是些乱七八糟的玩意,提示的还不是这个函数的”这种情况吗?
LindsayZhou
2022-09-17 22:11:46 +08:00
@efaun #5
实际这跟 Python 没什么关系吧,现在 IDE 应该都是调的 LSP ,要么是你 IDE 出了问题,给了 LSP 错的东西,要么是 LSP 出了什么奇怪的问题,怎么也不到 Python 头上吧。
我用 Emacs ,倒是没碰到过。
ClericPy
2022-09-17 22:13:43 +08:00
和六楼差不多, 感觉如果我自己设计这些方法, 命名也是这种样子, 因为确实有具体语义

刚开始可能确实记不住, 写一两年真用到很快就记住了... 有时候脑子没想起来, 手已经打出来了
ml1344677
2022-09-17 22:25:12 +08:00
我每次用 setdefault()都要查一下 哈哈哈
DOLLOR
2022-09-17 23:10:19 +08:00
边写边查文档,或者写 type hints ,让编辑器提示。
Jirajine
2022-09-17 23:11:18 +08:00
不常用的方法,翻一翻补全菜单就行了,常用的自然就已经记住了。
laqow
2022-09-18 11:17:43 +08:00
只用其中一个,用不了就创造条件用
Morriaty
2022-09-18 16:07:58 +08:00
还有一点,删除动作真的很少很少见。写了四五年 python 了,业务代码也有,算法模型也有,新增元素非常常见,但删除元素真的很少。。。比如 dict.remove set.dicard 方法,你这里不说,我都想不起来
lookStupiToForce
2022-09-19 10:46:05 +08:00
那些不常用的真不必要记,记了不用会继续忘,到时候怕错还是要回头查文档
python 里语法糖那么多,你如果每一种语法糖都想学会用熟用透,接手你代码的同事一定且肯定会吐血
多的不说,不看文档有多少人能把 for else ,while else ,try else 的具体用法分清的?有多少人能把'str'.format(), f'str{param}'的格式给弄清的?

#6 楼确实总结得很好,但我想大多数人看过一遍之后只要没在代码里经常用,过一个星期就忘光了,我可能是明天如果要用都得去再查一次
krixaar
2022-09-19 12:01:03 +08:00
删什么删,直接 dic = {k:v for k,v in dic.items() if k != '要删除的 key'},comprehension 语法通用 (逃
blankmiss
2022-09-21 08:59:59 +08:00
@JasonLaw type hints 可以参考我的历史主题 /t/866860
JasonLaw
2022-09-21 09:04:18 +08:00
@blankmiss #17 这是个疑问句😅,这种情况不是 Python 的问题,而是不熟悉 Python 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/880885

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX