将指针传递给Python中的列表

时间:2011-12-24 04:51:33

标签: python list pointers

有没有办法将指针传递给列表,所以我可以 update_list(list, data)

而不是必须这样做 list = update_list(list, data)

无论这是否可能,在这种情况下,什么是可取的和Pythonic?

5 个答案:

答案 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)