如何用 python 中的函数改变列表?
How to mutate a list with a function in python?
这是我编写的描述我的问题的伪代码:-
func(s):
#returns a value of s
x = a list of strings
print func(x)
print x #these two should give the SAME output
当我最后打印 x 的值时,我希望它是 func(x) 返回的值。我可以只通过编辑函数来做这样的事情吗(不设置 x = func(x)
)
这已经是它的行为方式了,函数可以改变列表
>>> l = ['a', 'b', 'c'] # your list of strings
>>> def add_something(x): x.append('d')
...
>>> add_something(l)
>>> l
['a', 'b', 'c', 'd']
但是请注意,您不能以这种方式改变原始列表
def modify(x):
x = ['something']
(以上将分配 x
而不是原始列表 l
)
如果你想在你的列表中放置一个新列表,你需要像这样的东西:
def modify(x):
x[:] = ['something']
func(s):
s[:] = whatever after mutating
return s
x = a list of strings
print func(x)
print x
你实际上不需要return任何东西:
def func(s):
s[:] = [1,2,3]
x = [1,2]
print func(x)
print x # -> [1,2,3]
这完全取决于您实际在做什么,添加或列表的任何直接突变将反映在函数外部,因为您实际上正在更改传入的原始 object/list。如果您正在做一些事情创建了一个新对象,您希望设置中传递的列表中反映的更改 s[:] =..
将更改原始列表。
这是我编写的描述我的问题的伪代码:-
func(s):
#returns a value of s
x = a list of strings
print func(x)
print x #these two should give the SAME output
当我最后打印 x 的值时,我希望它是 func(x) 返回的值。我可以只通过编辑函数来做这样的事情吗(不设置 x = func(x)
)
这已经是它的行为方式了,函数可以改变列表
>>> l = ['a', 'b', 'c'] # your list of strings
>>> def add_something(x): x.append('d')
...
>>> add_something(l)
>>> l
['a', 'b', 'c', 'd']
但是请注意,您不能以这种方式改变原始列表
def modify(x):
x = ['something']
(以上将分配 x
而不是原始列表 l
)
如果你想在你的列表中放置一个新列表,你需要像这样的东西:
def modify(x):
x[:] = ['something']
func(s):
s[:] = whatever after mutating
return s
x = a list of strings
print func(x)
print x
你实际上不需要return任何东西:
def func(s):
s[:] = [1,2,3]
x = [1,2]
print func(x)
print x # -> [1,2,3]
这完全取决于您实际在做什么,添加或列表的任何直接突变将反映在函数外部,因为您实际上正在更改传入的原始 object/list。如果您正在做一些事情创建了一个新对象,您希望设置中传递的列表中反映的更改 s[:] =..
将更改原始列表。