我喜欢在作业的右侧使用元组解包:
>>> 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噪声。
答案 0 :(得分:7)
您可以使用添加运算符:
a = [3, 4]
b = [1, 2] + a
答案 1 :(得分:5)
您有几个选项,但最好的选择是使用列表连接(+
):
b = [1,2] + a
如果您真的希望能够使用*
语法,可以创建自己的列表包装器:
def my_list(*args):
return list(args)
然后你可以把它称为:
a = 3,4
b = my_list(1,2,*a)
我认为这里的好处是a
不需要是列表,它可以是任何序列类型。
答案 2 :(得分:2)
不,这不是计划好的。 *arg
任意参数列表(和**kw
关键字参数映射)仅适用于python call invocations(由*arg
and **kw
function signatures镜像),并且仅适用于{{b = [10, 2] + a
的左侧3}}
您可以简单地连接两个列表:
{{1}}
答案 3 :(得分:2)
这已在Python 3.5中修复,如PEP 448:
中所述>>> a=[3,4]
>>> b=[1,2,*a]
>>> b
[1, 2, 3, 4]