概述
我知道,如果我只想删除python中list t的第一个元素,我可以用以下方法来完成:
del t[0]
这是最简单的。然而:
t = t[1:]
号
同样有效。在我正在学习的教科书中说,使用后一种方法通常被认为是不好的做法,因为它本身并不删除列表的标题,但是
"slice运算符创建一个新的列表,赋值使t引用它,但没有一个引用它。"对作为参数传递的列表有任何影响。"
为什么这样不好?你能举出一个例子,在这个例子中,这样的方法会显著地改变一个函数吗?事先谢谢。
如果您特别想做的是从列表中删除第一个元素,那么使用不这样做的方法是不好的做法。这并不意味着t = t[1:]总体上是不好的做法。
此外,还可以使用t[:] = t[1:]修改原始列表。
有很多情况下,要么是del t[0]要么是t = t[1:]是罚款的,还有很多情况下,del t[0]是错误的,t = t[1:]是适当的。
您可以使用t.pop(0),这将返回第一个元素的值并将其从列表中删除。
@darvark-op并没有要求其他方法从列表中删除项目,而是询问修改原始列表和创建新列表的用例。
这不是一个好主意有多种原因:
创建一个新列表只需要做一些不必要的工作来创建新列表和取消分配旧列表。在这两个步骤之间,两次使用内存(因为原始列表和新列表同时处于活动状态,就在分配之前)。
如果有其他内容引用同一个列表,则不会更新:u = t; del t[0]同时更改u和t。但u = t; t = t[1:]在保持u不变的情况下将新列表分配给t。
最后,与不透明的t = t[1:]相比,del t[0]更清楚地说明了其去除元素的强度。
我认为t[:] = t[1:]可以用来改变现有的list对象,但它必须做大约两倍于del t[0]的工作,因为del操作只需要将所有后续的list项下移,而t[1:]必须将后续的项复制到新的list,然后将它们复制回原始的list对象。对吗?
考虑具有两个实现的函数:
def remove_first_a(t):
t = t[1:]
def remove_first_b(t):
del t[0]
现在,请参见正在使用的功能:
> l = [1, 2, 3]
> remove_first_a(l)
> l
[1, 2, 3]
> remove_first_b(l)
> l
[2, 3]
号
第一个实现只重新分配局部变量t,它对作为参数传递的对象没有影响。第二个实现实际上改变了该对象。第一个函数在其当前形状中相当无用。你可以改变它:
def remove_first_a(t):
return t[1:]
> l = [1, 2, 3]
> x = remove_first_b(l)
> x
[2, 3]
你想要一个还是另一个,更多地取决于实际的用例。有时,您希望原始的EDOCX1[1]保持不变以供以后使用,有时您希望确保在仍然引用它的所有地方更改原始的。
只是del和slice的一个例子。
In [28]: u = t = [1, 2,3,4]
In [30]: id(u) == id(t) # now the id is same,they point one obj
Out[30]: True
。
如果我们使用del运算符。
In [31]: del t[0]
In [32]: t
Out[32]: [2, 3, 4]
In [33]: u
Out[33]: [2, 3, 4]
但是如果我们使用slice操作符。
In [35]: t = t[1:]
In [36]: t
Out[36]: [2, 3, 4]
In [37]: id(t) == id(u)
Out[37]: False
In [39]: u
Out[39]: [1, 2, 3, 4]
。
我们发现T和U现在指向不同的对象,所以我们处理列表T,列表U不变。
最后
以上就是美满溪流为你收集整理的python删除列表第一个,在Python中删除列表的第一个元素的全部内容,希望文章能够帮你解决python删除列表第一个,在Python中删除列表的第一个元素所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复