以这种方式清空列表似乎很“脏”:
while len(alist) > 0 : alist.pop()
这样做有明确的方法吗?
答案 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()
完全相反!):
alist *= 0
alist.clear() # Python 3.3+
del alist[:]
alist[:] = []
答案 2 :(得分:58)
答案 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
,它是列表对象的构造函数 - 例如,您可以使用lst
或list_
代替
答案 6 :(得分:-3)
您可以使用的另一个简单代码(取决于您的具体情况)是:
index=len(list)-1
while index>=0:
del list[index]
index-=1
你必须以列表的长度开始索引,然后向后转向索引为0,向前转,因为这样会使你的索引等于列表的长度,只有它被减少一半。
另外,请确保while行的"大于或等于"标志。省略它会留下列表[0]。