不知道序列长度时,在Python中进行多次解包分配

2024-04-24 22:37:39 发布

您现在位置:Python中文网/ 问答频道 /正文

多个开箱作业的教科书示例如下:

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(与上面完全一样),将其余行赋给单个容器^{>(我不知道会有多少行,只是一些正整数)。


Tags: of项目importnumpy示例soasnp
2条回答

语法添加到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]

或其他类似的解决方案。

Python 3.x可以很容易地做到这一点:

a, b, *c = someseq

Python2.x需要更多的工作:

(a, b), c = someseq[:2], someseq[2:]

相关问题 更多 >