2009-05-28 87 views
2

我想做一个类似模式匹配的功能来获取前两个元素,然后数组的其余部分返回值。python - 匹配数组返回值

例如,假设烫发(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 &功能的语言做列出分解得这么好这个样子!

回答

2

对于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) 

但不知道是否有做它像Ayman's Python 3 suggestion

+2

有点短:a,b,m =(lambda a,b,* more:(a,b,more))(* seq) – Javier 2009-05-28 22:50:05

3

在Python 2的任何方式,你的问题是非常接近一个答案已经:

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

或:

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

非常好,谢谢。

对于我来说,在解剖手边进行数组分解的建议对我来说并不是那么好,因为我实际上想对来自发生器表达式的返回进行模式匹配。

为(A,B,更多)在烫发(SEQ):...

我喜欢P3解决方案,但必须等待科莫多支持它!