python-数组返回值匹配

python-数组返回值匹配,python,list,Python,List,我想做一个类似函数的模式匹配来获得前两个元素,然后是数组的其余部分返回值 例如,假设perms(x)返回一个值列表,我想这样做: seq=perms(x) a = seq[0] b = seq[1] rest = seq[2:] 当然,我可以缩短为: [a,b] = seq[0:2] rest = seq[2:] 我可以用一些符号来做这个吗 [a,b,more] = perms(x) 或在概念上: [a,b,more..] = perms(x) PROLOG和函数式语言可以像这样很好地

我想做一个类似函数的模式匹配来获得前两个元素,然后是数组的其余部分返回值

例如,假设perms(x)返回一个值列表,我想这样做:

seq=perms(x)
a = seq[0]
b = seq[1]
rest = seq[2:]
当然,我可以缩短为:

[a,b] = seq[0:2]
rest  = seq[2:]
我可以用一些符号来做这个吗

[a,b,more] = perms(x)
或在概念上:

[a,b,more..] = perms(x)

PROLOG和函数式语言可以像这样很好地进行列表分解

您可以在Python 3中这样做:

(a, b, *rest) = seq

有关更多详细信息,请参阅。

对于Python 2,我知道您可以使用以下函数来完成:

>>> def getValues(a, b, *more):
    return a, b, more

>>> seq = [1,2,3,4,5]
>>> a, b, more = getValues(*seq)
>>> a
1
>>> b
2
>>> more
(3, 4, 5)

但不确定是否有任何类似python 2中的方法,您的问题已经非常接近答案:

a, b, more = (seq[0], seq[1], seq[2:])
或:

非常好,谢谢

在战斗手端解析数组的建议对我来说不太合适,因为我实际上想对生成器表达式的返回进行模式匹配

对于烫发中的(a、b、更多):


我喜欢P3解决方案,但必须等待Komodo支持它

稍微短一点:a,b,m=(lambda,b,*more:(a,b,more))(*seq)这是python-2.x的方法
(a, b), more = (seq[0:2], seq[2:])