2009-05-28 70 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解決方案,但必須等待科莫多支持它!