web-dev-qa-db-ja.com

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)を設定せずに)このようなことをすることはできますか?

10
Ritvik Sharma
func(s):
   s[:] = whatever after mutating
   return s

x = a list of strings
print func(x)
print x

実際には何も返す必要はありません。

def func(s):
    s[:] = [1,2,3]

x = [1,2]
print func(x)
print x # -> [1,2,3]

それはすべてあなたが実際に行っていることに依存します、あなたが実際に渡された元のオブジェクト/リストを変更しているので、リストの追加または直接の突然変異は関数の外に反映されます。あなたが新しいオブジェクトを作成する何かをしていてあなたが望むなら設定s[:] =..で渡されたリストに反映された変更により、元のリストが変更されます。

8

それはすでにそれがどのように振る舞うかです、関数canリストを突然変異させます

>>> 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'] 
8
bakkal