似乎很“肮脏”以这种方式清空列表:
while len(alist) > 0 : alist.pop()
是否存在明确的方法?
#1楼
list = []
将list重置为空列表。
请注意,通常您不应list_保留的函数名称,例如list ,它是列表对象的构造函数-例如,可以使用lst或list_代替。
#2楼
实际上,这将从列表中删除内容,但不会用新的空列表替换旧标签:
del lst[:]
这是一个例子:
lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)
为了完整起见,切片分配具有相同的效果:
lst[:] = []
它也可以用于缩小列表的一部分,同时替换一部分(但这超出了问题的范围)。
请注意,执行lst = []不会清空列表,只是创建一个新对象并将其绑定到变量lst ,但是旧列表仍将具有相同的元素,并且如果具有其他变量绑定,效果将显而易见。
#3楼
您可以尝试:
alist[:] = []
这意味着:在列表[] (0个元素)在位置[:]处拼接(所有索引从头到尾)
[:]是切片运算符。 有关更多信息,请参见此问题 。
#4楼
您可以使用的另一个简单代码(取决于您的情况)是:
index=len(list)-1
while index>=0:
del list[index]
index-=1
您必须在列表的长度处开始索引,然后相对于索引在0处向前,向后前进,因为这将使您最终获得的索引等于列表的长度,并且只将其切成两半。
另外,请确保while行上有一个“大于或等于”符号。 省略它会使您剩下list [0]。
#5楼
如果您运行的是Python 3.3或更高版本,则可以使用list的clear()方法,该方法与dict , set , deque和其他可变容器类型的clear()并行:
alist.clear() # removes all items from alist (equivalent to del alist[:])
按照链接的文档页面,也可以使用alist *= 0来实现。
总结起来,有四种等效的方法可以就地清除列表(与Python的Zen完全相反!):
alist.clear() # Python 3.3+
del alist[:]
alist[:] = []
alist *= 0