如何在Python中清空列表?

时间:2009-09-09 16:08:21

标签: python list

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

while len(alist) > 0 : alist.pop()

这样做有明确的方法吗?

7 个答案:

答案 0 :(得分:549)

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

del lst[:]

以下是一个例子:

lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)

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

lst[:] = []

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

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

答案 1 :(得分:126)

如果您运行的是Python 3.3或更高版本,则可以使用list的{​​{3}}方法,该方法与clear()的{​​{1}}平行,dict },set和其他可变容器类型:

deque

根据链接的文档页面,alist.clear() # removes all items from alist (equivalent to del alist[:]) 也可以实现相同的目标。

总而言之,有四种方法可以就地清除列表(与clear()完全相反!):

  1. alist *= 0
  2. alist.clear() # Python 3.3+
  3. del alist[:]
  4. alist[:] = []

答案 2 :(得分:58)

你可以尝试:

alist[:] = []

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

[:]是切片运算符。有关详细信息,请参阅this question

答案 3 :(得分:32)

事实证明,使用python 2.5.2时,del l[:]比{use}更慢l[:] = []

$ 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

答案 4 :(得分:3)

lst *= 0

具有相同的效果
lst[:] = []

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

效率似乎大致相同

答案 5 :(得分:1)

list = []

会将list重置为空列表。

请注意,您通常不应该隐藏保留的函数名称,例如list,它是列表对象的构造函数 - 例如,您可以使用lstlist_代替

答案 6 :(得分:-3)

您可以使用的另一个简单代码(取决于您的具体情况)是:

index=len(list)-1

while index>=0:
    del list[index]
    index-=1

你必须以列表的长度开始索引,然后向后转向索引为0,向前转,因为这样会使你的索引等于列表的长度,只有它被减少一半。

另外,请确保while行的"大于或等于"标志。省略它会留下列表[0]。