Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何传递列表元素作为引用?_Python_Python 2.7 - Fatal编程技术网

Python 如何传递列表元素作为引用?

Python 如何传递列表元素作为引用?,python,python-2.7,Python,Python 2.7,我将列表中的单个元素传递给函数。我想修改该元素,因此也要修改列表本身 def ModList(element): element = 'TWO' l = list(); l.append('one') l.append('two') l.append('three') print l ModList(l[1]) print l 但此方法不会修改列表。就像元素是通过值传递的。输出为: ['one','two','three'] ['one','two','three'] 我希望函数调

我将列表中的单个元素传递给函数。我想修改该元素,因此也要修改列表本身

def ModList(element):
    element = 'TWO'

l = list();
l.append('one')
l.append('two')
l.append('three')
print l
ModList(l[1])
print l
但此方法不会修改列表。就像元素是通过值传递的。输出为:

['one','two','three']
['one','two','three']
我希望函数调用后列表的第二个元素是'TWO':

['one','TWO','three']
这可能吗?

Python。只需明确地做到:

l[1] = ModList(l[1])

另外,由于这只改变了一个元素,我建议
ModList
是一个容易混淆的名称。

Python是一种传递值语言,因此不能在函数
ModList
中通过赋值来改变值。但是,您可以做的是将列表和索引传递到
ModList
中,然后以这种方式修改元素

def ModList(theList, theIndex) :
  theList[theIndex] = 'TWO'

ModList(l, 1)

这里已有的解释是正确的。然而,由于我想以类似的方式滥用python,因此我将提交此方法作为解决方法

从列表中调用特定元素直接返回列表中该元素的值的副本。即使复制列表的子列表,也会返回对包含值副本的数组的新引用。考虑这个例子:

>>> a = [1, 2, 3, 4]
>>> b = a[2]
>>> b
3
>>> c = a[2:3]
>>> c
[3]
>>> b=5
>>> c[0]=6
>>> a
[1, 2, 3, 4]
无论是仅值复制的
b
,还是从
a
复制的子列表
c
,都不能更改
a
中的值。尽管它们有着共同的起源,但没有任何联系

但是,numpy阵列使用“原始er”内存分配,并允许返回数据视图。视图允许以不同的方式表示数据,同时保持与原始数据的关联。因此,一个有效的例子是

>>> import numpy as np
>>> a = np.array([1, 2, 3, 4])
>>> a
array([1, 2, 3, 4])
>>> b = a[2]
>>> b
3
>>> b=5
>>> a
array([1, 2, 3, 4])
>>> c = a[2:3]
>>> c
array([3])
>>> c[0]=6
>>> a
array([1, 2, 6, 4])
>>> 
虽然提取单个元素仍然仅按值复制,但维护元素
2
的数组视图将引用
a
的原始元素
2
(尽管它现在是
c
的元素
0
),并且对
c
的值所做的更改也会更改
a


Numpy
ndarray
s有许多不同的类型,包括通用对象类型。这意味着,对于几乎任何类型的数据,都可以保持这种“引用”行为,而不仅仅是数值。

在很多情况下,您也可以考虑让函数既修改又返回修改后的列表。这使调用方代码更具可读性:

def ModList(theList, theIndex) :
          theList[theIndex] = 'TWO'
    return theList

l = ModList(l, 1)

没有语法可以满足您的要求,但是有很多方法可以修改列表的一部分。如果你问一个关于你用这个来解决的具体问题,有人会想出最直观、最优雅的解决方案。这并不完全一致。“Python是一个传递值langauge”,因此当作为参数传递时可以修改原始列表?!?