如何清空Python中的列表?

看起来这么“肮脏”以这种方式清空列表:

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

有一个明确的方式来做到这一点?

这实际上从列表中删除内容,而不是用新的空列表replace旧标签

 del lst[:] 

例:

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

为了完整性,切片分配达到相同的效果:

 lst[:] = [] 

并且可以用来缩小列表的一部分,同时replace一个部分(但不在问题的范围之内)。

请注意,执行lst = []不会清空列表,只是创build一个新对象并将其绑定到variableslst ,但旧列表仍然具有相同的元素,并且如果具有其他variables绑定,效果将显而易见。

你可以尝试:

 alist[:] = [] 

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

[:]是切片运算符。 看到这个问题的更多信息。

如果你有Python 3.3或更好的版本,你可以使用与clear()dictsetdeque和其他可变容器types并行的list clear()方法:

 alist.clear() # removes all items from alist (equivalent to del alist[:]) 

根据链接页面, alist *= 0也可以达到同样的效果。

事实certificate,在Python 2.5.2中, del l[:]比1.1 l[:] = [] usec l[:] = []稍慢于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 

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

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

你必须从列表的长度开始索引,然后向后走,而不是0的索引,因为这会使你的索引等于列表的长度,只会减less一半。

此外,请确保while行有一个“大于或等于”的标志。 省略它会留下剩余的列表[0]。

 list = [] 

list重置为空列表。

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