Function which removes the first item in a list (Python)
我正在尝试编写一个函数,它删除了python列表中的第一项。这是我试过的。当我调用函数时,为什么不先删除错误的更改l?当我在主函数中执行时,为什么列表切片方法有效?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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) |
对列表进行切片将返回一个新的列表对象,该对象是切片中指示的原始列表索引的副本。然后反弹
另一方面,
你会看到同样的东西没有功能:
1 2 3 4 5 6 7 8 9 10 | >>> 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名称和对象的工作方式。
在函数
这就是martijn的意思,"然后反弹EDOCX1(函数中的本地名称),以引用新列表。"
相反,
例如,这也可以正常工作:
1 2 3 | def remove_first_right2(lst): x = lst # x is assigned to the same object as lst x.pop(0) # pop the item from the object |
号
或者,您可以使用
1 2 3 | def remove_first_element(lst): del lst[0] return lst |