当您不知道序列长度时,Python 中的多重解包赋值 [英] Multiple Unpacking Assignment in Python when you don't know the sequence length

查看:17
本文介绍了当您不知道序列长度时,Python 中的多重解包赋值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

多次拆包赋值的教科书例子是这样的:

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆