python - 匹配数组返回值

时间:2009-05-28 22:37:43

标签: 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&函数式语言确实列出了这样的分解!

4 个答案:

答案 0 :(得分:6)

你可以在Python 3中这样做:

(a, b, *rest) = seq

有关详细信息,请参阅extended iterable unpacking PEP

答案 1 :(得分:3)

在python 2中,你的问题已经非常接近答案了:

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

或:

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

答案 2 :(得分: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

那样做

答案 3 :(得分:0)

非常好,谢谢。

在战斗方面分析数组的建议对我来说效果不好,因为我实际上想要对生成器表达式的返回进行模式匹配。

for(a,b,more)in perms(seq):...

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