多个解包分配的教科书示例如下:
import numpy as NP
M = NP.arange(5)
a, b, c, d, e = M
# so of course, a = 0, b = 1, etc.
M = NP.arange(20).reshape(5, 4) # numpy 5x4 array
a, b, c, d, e = M
# here, a = M[0,:], b = M[1,:], etc. (ie, a single row of M is assigned each to a through e)
(我的问题不是numpy
具体的。事实上,我更喜欢纯Python解决方案。)
对于我现在正在看的那段代码,我看到了这个简单场景的两个复杂问题:
我通常不会知道M的形状;以及
我想解压一定数量的 物品(绝对少于所有物品),和 我想把剩下的部分放到单个中 容器
回到上面的5x4数组,我非常想做的是分别将前三行M分配给a,b和c(完全如上),以及其余的行(我不知道会有多少,只有一些正整数)到一个容器all_the_rest = []
。
答案 0 :(得分:27)
Python 3.x可以轻松完成此任务:
a, b, *c = someseq
Python 2.x需要更多工作:
(a, b), c = someseq[:2], someseq[2:]
答案 1 :(得分:11)
将此语法添加到Python 3
>>> # Python 3.x only
>>> a, b, *c = range(10)
>>> a
0
>>> b
1
>>> c
[2, 3, 4, 5, 6, 7, 8, 9]
但Python 2中没有类似的解决方案。
你当然可以
>>> s = range(10)
>>> s
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> (a, b, c), rest = s[0:3], s[3:]
>>> a
0
>>> b
1
>>> c
2
>>> rest
[3, 4, 5, 6, 7, 8, 9]
或其他类似的解决方案。