我想做一个类似模式匹配的函数来获取前两个元素,然后数组的其余部分返回值。
例如,假设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&函数式语言确实列出了这样的分解!
答案 0 :(得分:6)
答案 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支持它!