当您不知道序列长度时,Python 中的多重解包赋值 [英] Multiple Unpacking Assignment in Python when you don't know the sequence length
问题描述
多次拆包赋值的教科书例子是这样的:
The textbook examples of multiple unpacking assignment are something like:
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 解决方案.)
(My question is not numpy
specific. Indeed, I would prefer a pure Python solution.)
对于我现在正在查看的一段代码,我看到在这个简单的场景中存在两个复杂情况:
For the piece of code I'm looking at now, I see two complications on that straightforward scenario:
我通常不知道M的形状;和
I usually won't know the shape of M; and
我想解压一定数量的项目(绝对少于所有项目),以及我想把剩下的变成一个单容器
I want to unpack a certain number of items (definitely less than all items), and I want to put the remainder into a single container
那么回到上面的 5x4 数组,我非常想做的是将 M 的前三行分别分配给 a、b 和 c(完全如上),而 其余的行(我不知道会有多少,只是一些正整数)到单个容器中,all_the_rest = []
.
So back to the 5x4 array above, what I would very much like to do is assign the first three rows of M to a, b, and c respectively (exactly as above), and the rest of the rows (I have no idea how many there will be, just some positive integer) to a single container, all_the_rest = []
.
推荐答案
Python 3.x 可以轻松做到这一点:
Python 3.x can do this easily:
a, b, *c = someseq
Python 2.x 需要做更多的工作:
Python 2.x needs a bit more work:
(a, b), c = someseq[:2], someseq[2:]
这篇关于当您不知道序列长度时,Python 中的多重解包赋值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!