繁体   English   中英

列表构造中的元组解包(python3)

[英]Tuple unpacking in list construction (python3)

我喜欢在作业的右侧使用元组拆包:

>>> 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参数。 我可以继承,但是这会给其他人应该阅读的脚本引入一些非pythonic噪声。

你可以使用add运算符:

a = [3, 4]
b = [1, 2] + a

您有几个选项,但最好的选择是使用列表连接( + ):

b = [1,2] + a

如果您真的希望能够使用*语法,可以创建自己的列表包装器:

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

然后你可以称之为:

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

我想这里的好处是a不需要是列表,它可以是任何序列类型。

不,这不是计划好的。 *arg任意参数列表(和**kw关键字参数映射)仅适用于python 调用调用 (由*arg**kw函数签名镜像),并且适用于可迭代赋值的左侧。

您可以简单地连接两个列表:

b = [10, 2] + a

PEP 448中所述,这在Python 3.5中得到修复:

>>> a=[3,4]
>>> b=[1,2,*a]
>>> b
[1, 2, 3, 4]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM