用这种方式清空列表似乎很“肮脏”:
while len(alist) > 0 : alist.pop()
是否存在明确的方法来做到这一点?
用这种方式清空列表似乎很“肮脏”:
while len(alist) > 0 : alist.pop()
是否存在明确的方法来做到这一点?
当前回答
你可以试试:
alist[:] = []
这意味着:在列表[](0个元素)中拼接位置[:](从开始到结束的所有索引)
[:]是切片操作符。有关更多信息,请参阅这个问题。
其他回答
你可以试试:
alist[:] = []
这意味着:在列表[](0个元素)中拼接位置[:](从开始到结束的所有索引)
[:]是切片操作符。有关更多信息,请参阅这个问题。
这实际上是从列表中删除内容,但不会将旧标签替换为新的空列表:
del lst[:]
这里有一个例子:
lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)
为了完整起见,切片分配具有相同的效果:
lst[:] = []
它还可以用于缩小列表的一部分,同时替换一部分(但这超出了问题的范围)。
注意,执行lst =[]并没有清空列表,只是创建了一个新对象并将其绑定到变量lst,但是旧的列表仍然有相同的元素,如果它有其他变量绑定,效果会很明显。
如果你运行的是Python 3.3或更高版本,你可以使用list的clear()方法,它与dict、set、deque和其他可变容器类型的clear()方法并行:
alist.clear() # removes all items from alist (equivalent to del alist[:])
根据链接的文档页面,也可以使用alist *= 0实现同样的效果。
总而言之,有四种等效的方法来就地清除列表(与Python的禅意完全相反!):
alist.clear() Python 3.3+ del alist [:] alist[:] = [] 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
list = []
将列表重置为空列表。
注意,您通常不应该使用保留函数名,例如list,它是列表对象的构造函数——例如,您可以使用lst或list_代替。