我正在尝试编写一个删除Python列表中第一项的函数.这就是我尝试过的.当我调用函数时为什么不删除remove_first_wrong?当我在main函数中执行它时,为什么列表切片方法会起作用?
def remove_first_wrong(lst): lst = lst[1:] def remove_first_right(lst): lst.pop(0) if __name__ == '__main__': l = [1, 2, 3, 4, 5] remove_first_wrong(l) print(l) l_2 = [1, 2, 3, 4, 5] remove_first_right(l_2) print(l_2) # Why does this work and remove_first_wrong doesn't? l_3 = [1, 2, 3, 4, 5] l_3 = l_3[1:] print(l_3)
Martijn Piet.. 8
切片列表会返回一个新的列表对象,它是您在切片中指示的原始列表索引的副本.然后你反弹lst
(函数中的本地名称)来引用该新列表.在此过程中永远不会更改旧列表.
list.pop()
另一方面,对列表对象本身进行操作.您使用什么参考到达列表并不重要.
没有函数你会看到同样的事情:
>>> a = [1, 2] >>> b = a[:] # slice with all the elements, produces a *copy* >>> b [1, 2] >>> a.pop() # remove an element from a won't change b 2 >>> b [1, 2] >>> a [1]
使用[:]
是制作列表浅表副本的两种方法之一,请参阅如何克隆或复制列表?
您可能想要阅读或观看Ned Batchelder的名称和值预测,以进一步了解Python名称和对象的工作原理.
切片列表会返回一个新的列表对象,它是您在切片中指示的原始列表索引的副本.然后你反弹lst
(函数中的本地名称)来引用该新列表.在此过程中永远不会更改旧列表.
list.pop()
另一方面,对列表对象本身进行操作.您使用什么参考到达列表并不重要.
没有函数你会看到同样的事情:
>>> a = [1, 2] >>> b = a[:] # slice with all the elements, produces a *copy* >>> b [1, 2] >>> a.pop() # remove an element from a won't change b 2 >>> b [1, 2] >>> a [1]
使用[:]
是制作列表浅表副本的两种方法之一,请参阅如何克隆或复制列表?
您可能想要阅读或观看Ned Batchelder的名称和值预测,以进一步了解Python名称和对象的工作原理.