Python中清空列表的多种方法及最佳实践
转载自 http://www.pythondoeswhat.com/2018/03/the-zen-of-empty-lists.html
假如有个 list 叫做 bucket ,将其清空的方法有:
- bucket = []
- bucket.clear()
- del bucket[:]
- bucket[:]=[]
- bucket[:]={}
- bucket *=0
- bucket *= -3
- bucket *= False
Python中清空列表的多种方法及最佳实践
Python 的哲学是啥来着
帖子标题问的是Python里清空列表的几种方法和最佳实践。这个不涉及具体代码问题,我直接说核心。
最常用就两种方法,用哪个看场景:
list.clear():这是Python 3.3+之后的首选,最清晰、最直接,就是告诉别人你要清空这个列表。性能也好。- 切片赋值
list[:] = []:老派写法,也能清空原列表。现在用clear()就行,这个写法主要用在需要兼容旧版本或者你有个习惯。
有个大坑要避开:别用 list = []!
这行代码不是清空原来的列表,而是让变量list指向了一个全新的空列表。如果还有其他变量指向原来的那个列表,里面的数据一点都没动,根本没清空。这经常是bug的来源。
总结建议:无脑用list.clear()就对了。
“There should be one-- and preferably only one --obvious way to do it”. >_<
最近看到了阿里云的 redis 开发规范好像有提到这么一嘴
使用 hscan、sscan、zscan 方式渐进式删除,同时要注意防止 bigkey 过期时间自动删除问题
效率影响很大
现在的标题只夸张 10 倍了?
方法 7 后面*=任意负整数都可以清空,这么看来是有 2^31 - 1 种方法,加上 lz 说的另外 7 种,那一共是有 2^31 + 6 种了,那就变成夸小了。。
负整数是 2^31 个,所以上述数字要加上 1
那么喜欢把玩,为什么不去玩 Ruby 呢。
搞不懂你要干什么,直接 list=[]不好用?
同上 list=[]
clear ()
和
=[]
的副作用不一样的
list=[] 会创建一个新的对象
复用旧 list 的缓冲空间,常数级优化。
clear() python3…
其实还好。一共就 4 种方法:
1. 全部赋一个新的值。 = [] *= 都一样。老的没了被 GC 了
2. .clear()
3. del
4. [:] = 赋值。
我觉得 用 第二种最好。因为可以实现批量删除。但是似乎 py2 里不支持。
Exception in thread “read v2ex” java.lang.ArrayIndexOutOfBoundsException: 0

