如何在Python中清空列表?

DrF*_*k3n 348 python list

以这种方式清空列表似乎很"脏":

while len(alist) > 0 : alist.pop()
Run Code Online (Sandbox Code Playgroud)

这样做有明确的方法吗?

for*_*ran 559

这实际上会从列表中删除内容,但不会用旧的空列表替换旧标签:

del lst[:]
Run Code Online (Sandbox Code Playgroud)

这是一个例子:

lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)
Run Code Online (Sandbox Code Playgroud)

为了完整起见,切片赋值具有相同的效果:

lst[:] = []
Run Code Online (Sandbox Code Playgroud)

它还可以用于缩小列表的一部分,同时替换一个部分(但这超出了问题的范围).

请注意,do lst = []不会清空列表,只是创建一个新对象并将其绑定到变量lst,但旧列表仍然具有相同的元素,如果它具有其他变量绑定,则效果将很明显.

  • 我通常不会读出大声的python代码xD,但如果我不得不认为我会说"从开始到列表末尾的切片". (14认同)
  • 还有两个问题:什么是"del"?(我推断它可以解决问题,但我真的不知道它是什么)和第二种:你如何阅读(大声)[:] (3认同)
  • 有关del的合理解释,我将参考文档:http://docs.python.org/reference/simple_stmts.html#the-del-statement (2认同)
  • @jellybean完全无意中^ _ ^英语不是我的母语,所以我真的没有注意到两个评论之间的对比. (2认同)

Eug*_*ash 154

如果你有Python的3.3或更好的,你可以使用clear()的方法list是平行clear()dict,set,deque和其他易变的容器类型:

alist.clear()  # removes all items from alist (equivalent to del alist[:])
Run Code Online (Sandbox Code Playgroud)

根据链接页面,也可以实现相同的目的alist *= 0.

  • 这个答案应该在顶部,stackoverflow有什么问题! (5认同)

Ada*_*kin 61

你可以尝试:

alist[:] = []
Run Code Online (Sandbox Code Playgroud)

这意味着:[]在该位置的列表中拼接(0个元素)[:](从开始到结束的所有索引)

[:]是切片运算符.有关更多信息,请参阅此问题.

  • @mitenka没有清空列表,它用不同的列表覆盖变量`alist`,该列表恰好是空的.如果其他人对原始列表有引用,那么它仍然是原样(即它包含开头的内容) (15认同)
  • 为什么不只是'alist = []`? (3认同)

Dan*_* D. 32

事实证明,使用python 2.5.2,del l[:]l[:] = []1.1 usec 略慢.

$ python -mtimeit "l=list(range(1000))" "b=l[:];del b[:]"
10000 loops, best of 3: 29.8 usec per loop
$ python -mtimeit "l=list(range(1000))" "b=l[:];b[:] = []"
10000 loops, best of 3: 28.7 usec per loop
$ python -V
Python 2.5.2
Run Code Online (Sandbox Code Playgroud)


Iva*_*ann 5

lst *= 0
Run Code Online (Sandbox Code Playgroud)

具有相同的效果

lst[:] = []
Run Code Online (Sandbox Code Playgroud)

它有点简单,也许更容易记住.除此之外,没什么好说的

效率似乎大致相同