问题:如何清空列表?
用这种方式清空列表似乎太“脏”了:
while len(alist) > 0 : alist.pop()
是否存在明确的方法?
回答 0
实际上,这将从列表中删除内容,但不会用新的空列表替换旧标签:
del lst[:]
这是一个例子:
lst1 = [1, 2, 3]
lst2 = lst1
del lst1[:]
print(lst2)
为了完整起见,切片分配具有相同的效果:
lst[:] = []
它也可以用于缩小列表的一部分,同时替换一部分(但这超出了问题的范围)。
请注意,这样lst = []
做不会清空列表,只是创建一个新对象并将其绑定到变量lst
,但是旧列表仍将具有相同的元素,并且如果具有其他变量绑定,效果将显而易见。
回答 1
如果你正在运行的Python 3.3或更好的,你可以使用list
,这是平行clear()
的dict
,set
,deque
和其他易变的容器类型:
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
回答 2
回答 3
事实证明,使用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
回答 4
lst *= 0
与…具有相同的效果
lst[:] = []
它稍微简单一些,也许更容易记住。除此之外,无话可说
效率似乎差不多
回答 5
list = []
将重置list
为空列表。
请注意,通常您不应该遮盖保留的函数名称,例如list
,它是列表对象的构造函数- 例如,可以使用lst
或list_
代替。
回答 6
您可以使用的另一个简单代码(取决于您的情况)是:
index=len(list)-1
while index>=0:
del list[index]
index-=1
您必须在列表的长度处开始索引,然后相对于索引在0处向前,向后前进,因为这将使您最终获得的索引等于列表的长度,并且仅将其切成两半。
另外,请确保while行上有一个“大于或等于”符号。省略它会使您剩下list [0]。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。