python - 数组返回值匹配

2 投票
4 回答
1230 浏览
提问于 2025-04-15 11:54

我想用一种类似函数的方式来匹配,获取数组的前两个元素,然后返回剩下的部分。

比如,假设有一个函数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 个回答

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在Python 3中的建议那样的方法。

3

在Python 2中,你的问题其实已经有很接近的答案了:

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

或者:

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

你可以在Python 3中这样做:

(a, b, *rest) = seq

想了解更多细节,可以查看这个扩展可迭代对象解包的PEP

撰写回答