Pythonでリストを解凍しますか?


222

「unpack」は間違った語彙である可能性があると思います-申し訳ありませんが、これは重複した質問だと思います。

私の質問は非常に単純です:アイテムのリストを期待する関数で、エラーを発生させずにPythonリストアイテムを渡すにはどうすればよいですか?

my_list = ['red', 'blue', 'orange']
function_that_needs_strings('red', 'blue', 'orange') # works!
function_that_needs_strings(my_list) # breaks!

確かに、リストを展開'red','blue','orange'して、蹄の上で関数を渡す方法がなければなりませんか?

回答:



32

はい、*args(splat)構文を使用できます:

function_that_needs_strings(*my_list)

どこmy_listでも反復可能です。Pythonは指定されたオブジェクトをループし、各要素を関数の個別の引数として使用します。

呼び出し式のドキュメントを参照してください。

2つの星を使用して、同等のキーワードパラメータもあります。

kwargs = {'foo': 'bar', 'spam': 'ham'}
f(**kwargs)

また、関数シグネチャでキャッチオール引数を指定するための同等の構文があります。

def func(*args, **kw):
    # args now holds positional arguments, kw keyword arguments

14

Python 3.5以降では、無制限のlistsを解凍できます。

PEP 448-追加の解凍の一般化

だからこれはうまくいくでしょう:

a = ['1', '2', '3', '4']
b = ['5', '6']
function_that_needs_strings(*a, *b)

1
Python 2.7または3.4で同じことをするにはどうすればよいですか?
answerSeeker 2017年

1
@answerSeekerは効率的ではありませんが、function_that_needs_strings(*(a+b))
つつじ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.