在一个有索引的列表上使用列表方法

3

我对Python相当陌生,最近遇到了以下行为:

如果我有一个列表,并通过值删除其中的一个元素:

lst=[1,2,3,4,5,6]
lst.remove(3)
print(lst)

我得到了预期的结果。
[1,2,4,5,6]

如果我键入一个索引列表,我将获得预期结果:

type(lst[2:])
list

但是,如果我对一个带索引的列表应用列表方法,我得到的并不是我期望的原地修改的列表。

lst=[1,2,3,4,5,6]
#type(lst[2:])
lst[2:].remove(3)
print(lst)
[1,2,3,4,5,6]

这是因为索引列表实际上并不是与原始列表相同的列表(从 .remove() 方法的角度来看)吗?


4
lst[2:] 复制了数组,.remove(3) 从复制的数组中删除元素,因此原始数组永远不会被改变。 - Nick stands with Ukraine
2
@Nick *列表 - Klaus D.
@guidot 不是的,list.remove 方法返回的是 None - Boseong Choi
https://dev59.com/sl8d5IYBdhLWcg3weyM0 - Kokomodo
@Kokomodo 不会,它是原地编辑的。你可以使用内置的 id 函数来检查列表的 id 是否发生了变化。 - Nick stands with Ukraine
显示剩余4条评论
1个回答

1

1st[2:]被称为切片。它从第二个索引开始创建您的列表的副本,直到最后一个。 因此,当您使用remove函数时,它会从副本中删除元素而不是原始列表。 使用:

lst = lst[2:]
lst.remove(3)

这将会给你期望看到的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接