如何清空一个列表?

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

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

是否存在明确的方法来做到这一点?

499629 次浏览
list = []

list重置为空列表。

注意,通常不应该使用保留函数名,例如list,它是列表对象的构造函数——例如,你可以使用lstlist_代替。

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

del lst[:]

这里有一个例子:

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

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

lst[:] = []

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

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

你可以试试:

alist[:] = []

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

[:]是切片操作符。更多信息请参见这个问题

在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

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

index=len(list)-1


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

你必须从列表的长度开始索引从倒数开始索引从0开始,因为那样你会得到index等于列表的长度而它只是被切成两半。

另外,确保while行有一个“大于或等于”符号。省略它将留下列表[0]。

如果你运行的是Python 3.3或更高版本,你可以使用listclear()方法,它与dictsetdeque和其他可变容器类型的clear()并行:

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

根据链接的文档页面,同样也可以通过alist *= 0实现。

总而言之,有四种等效的方法来就地清除列表(与Python的禅宗!完全相反):

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

效果与

lst[:] = []

这样更简单,也更容易记住。除此之外就没什么可说的了

效率似乎是一样的