5

割り当ての右側でタプルアンパックを使用したいと思います。

>>> a = [3,4]

>>> b = [1,2,*a]
  File "<stdin>", line 1
SyntaxError: can use starred expression only as assignment target

もちろん、私は次のことができます。

>>> b = [1,2]
>>> b.extend(a)
>>> b
[1, 2, 3, 4]

しかし、これは面倒だと思います。私はポイントを逃していますか?簡単な方法ですか?これを持っている予定ですか?それとも、その言語で明示的にそれを持たない理由がありますか?

問題の一部は、すべてのコンテナータイプが、反復可能を期待し、*args引数を受け入れないコンストラクターを使用することです。サブクラス化することもできますが、それは他の人が読むことになっているスクリプトに非Pythonのノイズを導入しています。

4

4 に答える 4

9

追加演算子を使用できます。

a = [3, 4]
b = [1, 2] + a
于 2012-09-19T11:01:09.077 に答える
7

いくつかのオプションがありますが、最良の方法はリスト連結(+)を使用することです。

b = [1,2] + a

本当に構文を使用できるようにしたい場合は*、独自のリストラッパーを作成できます。

def my_list(*args):
    return list(args)

次に、次のように呼び出すことができます。

a = 3,4
b = my_list(1,2,*a)

ここでの利点はa、リストである必要はなく、任意のシーケンスタイプである可能性があることだと思います。

于 2012-09-19T11:00:59.847 に答える
4

いいえ、これは計画されていません。任意の*argパラメーターリスト(およびキーワード引数のマッピング)は、Python呼び出しの呼び出し(および関数の署名によってミラーリングされます)、および反復可能な割り当ての左側に**kwのみ適用されます。*arg**kw

2つのリストを単純に連結できます。

b = [10, 2] + a
于 2012-09-19T11:01:09.847 に答える
3

これは、PEP 448で説明されているように、Python3.5で修正されています。

>>> a=[3,4]
>>> b=[1,2,*a]
>>> b
[1, 2, 3, 4]
于 2018-02-23T05:54:53.477 に答える