Python 2 中的扩展元组解包
是否可以在 Python 2 中模拟扩展元组拆包?
具体来说,我有一个 for 循环:
for a, b, c in mylist:
当 mylist 是大小为 3 的元组列表时,它可以正常工作。如果我传入大小为 4 的列表,我希望相同的 for 循环能够工作。
我想我最终会使用命名元组,但我想知道是否有一种简单的编写方法:
for a, b, c, *d in mylist:
以便 d
吃掉任何额外的成员。
Is it possible to simulate extended tuple unpacking in Python 2?
Specifically, I have a for loop:
for a, b, c in mylist:
which works fine when mylist is a list of tuples of size three. I want the same for loop to work if I pass in a list of size four.
I think I will end up using named tuples, but I was wondering if there is an easy way to write:
for a, b, c, *d in mylist:
so that d
eats up any extra members.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您不能直接执行此操作,但编写一个实用函数来执行此操作并不是非常困难:
您可以将其应用到 for 循环,如下所示:
You can't do that directly, but it isn't terribly difficult to write a utility function to do this:
You could apply it to your for loop like this:
您可以定义一个包装函数,将列表转换为四元组。例如:
代码打印:
You could define a wrapper function that converts your list to a four tuple. For example:
The code prints:
到底如何,概括为解压任意数量的元素:
For the heck of it, generalized to unpack any number of elements:
您可以编写一个非常基本的函数,其功能与 python3 扩展 unpack 完全相同。为了易读,稍微冗长。请注意,“rest”是星号所在的位置(从第一个位置 1 开始,而不是 0)
You can write a very basic function that has exactly the same functionality as the python3 extended unpack. Slightly verbose for legibility. Note that 'rest' is the position of where the asterisk would be (starting with first position 1, not 0)
对于那些通过网络搜索到达这里的人来说,Python 3 解决方案:
您可以使用
itertools.zip_longest
,如下所示:对于 Python 2.x,您可以按照此答案。
Python 3 solution for those that landed here via an web search:
You can use
itertools.zip_longest
, like this:For Python 2.x you can follow this answer.