有没有办法将指针传递给列表,所以我可以
update_list(list, data)
而不是必须这样做
list = update_list(list, data)
无论这是否可能,在这种情况下,什么是可取的和Pythonic?
答案 0 :(得分:10)
我建议阅读Semantics of Python variable names from a C++ perspective:
所有变量均为参考
这是对整篇文章的过度简化,但这(以及list
是可变类型的理解)应该有助于您了解以下示例的工作原理。
In [5]: def update_list(lst, data):
...: for datum in data:
...: lst.append(datum)
...:
In [6]: l = [1, 2, 3]
In [7]: update_list(l, [4, 5, 6])
In [8]: l
Out[8]: [1, 2, 3, 4, 5, 6]
您甚至可以使用extend()方法缩短它:
In [9]: def update_list(lst, data):
...: lst.extend(data)
...:
实际上可能不需要你的功能。
N.B: list
是一个内置函数,因此是变量名称的错误选择。
答案 1 :(得分:3)
你没有在Python中传递指针。只需分配给整个列表的切片
def update_list(list, data):
list[:] = newlist
答案 2 :(得分:1)
当然,只需确保使用正确的变量名称(list
是一种类型):
>>> def update_list(lst):
... lst.append('hello')
...
>>> a = []
>>> update_list(a)
>>> a
['hello']
>>>
我不喜欢就地修改东西,我实际上更喜欢第二种方法而不是第一种方法。
答案 3 :(得分:1)
除了考虑到list
是可变的,并且你可以在其他函数中修改它,正如其他答案已经指出的那样;如果您正在编写许多update_list
方法,则必须考虑所存储的数据是否真的不是列表,而是适合您作为面向对象方法的一部分创建的模型的其他内容。问题
如果是这种情况,那么请务必创建自己的类和方法,以提供对象内部状态所需的接口:
class MyList(list):
def update(self, data):
# Whatever you need to update your data
...
my_list = MyList()
my_list.update(data)
答案 4 :(得分:0)
This StackOverflow question and subsequent accepted response将指导您正确的方向来理解Python传递的值所做的Pythonic方式。
通常,Pythonic更新列表的方法是编写/调用update_list(list, data)
。