清空 Python list 的 100 种方法……

2018-03-23 09:52:09 +08:00
 scriptB0y

转载自 http://www.pythondoeswhat.com/2018/03/the-zen-of-empty-lists.html

假如有个 list 叫做 bucket ,将其清空的方法有:

  1. bucket = []
  2. bucket.clear()
  3. del bucket[:]
  4. bucket[:]=[]
  5. bucket[:]={}
  6. bucket *=0
  7. bucket *= -3
  8. bucket *= False
5177 次点击
所在节点    Python
15 条回复
infun
2018-03-23 09:54:12 +08:00
Python 的哲学是啥来着
scriptB0y
2018-03-23 09:54:51 +08:00
@infun "There should be one-- and preferably only one --obvious way to do it". >_<
th00000
2018-03-23 09:57:33 +08:00
最近看到了阿里云的 redis 开发规范好像有提到这么一嘴
使用 hscan、sscan、zscan 方式渐进式删除,同时要注意防止 bigkey 过期时间自动删除问题
效率影响很大
yangg
2018-03-23 10:58:31 +08:00
现在的标题只夸张 10 倍了?
marcong95
2018-03-23 11:08:06 +08:00
@yangg 方法 7 后面*=任意负整数都可以清空,这么看来是有 2^31 - 1 种方法,加上 lz 说的另外 7 种,那一共是有 2^31 + 6 种了,那就变成夸小了。。
marcong95
2018-03-23 11:08:46 +08:00
@yangg 负整数是 2^31 个,所以上述数字要加上 1
msg7086
2018-03-23 11:29:00 +08:00
那么喜欢把玩,为什么不去玩 Ruby 呢。
shuizhengqi
2018-03-23 11:42:59 +08:00
搞不懂你要干什么,直接 list=[]不好用?
suhaocong
2018-03-23 11:45:39 +08:00
同上 list=[]
sleshep
2018-03-23 12:45:10 +08:00
clear ()

=[]
的副作用不一样的
LokiSharp
2018-03-23 13:15:39 +08:00
list=[] 会创建一个新的对象
ipwx
2018-03-23 13:18:21 +08:00
@shuizhengqi 复用旧 list 的缓冲空间,常数级优化。
zbl430
2018-03-23 15:14:01 +08:00
clear() python3....
est
2018-03-23 15:24:20 +08:00
其实还好。一共就 4 种方法:

1. 全部赋一个新的值。 = [] *= 都一样。老的没了被 GC 了
2. .clear()
3. del
4. [:] = 赋值。

我觉得 用 第二种最好。因为可以实现批量删除。但是似乎 py2 里不支持。
Icezers
2018-03-23 16:41:34 +08:00
Exception in thread "read v2ex" java.lang.ArrayIndexOutOfBoundsException: 0

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

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

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

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

© 2021 V2EX