如何将元组解包为比元组本身更多的值?

6
我有一个元组列表,每个元组包含1到5个元素。我想将这些元组解包成五个值,但对于少于五个元素的元组,这种方法不起作用。
>>> t = (1,2) # or (1) or (1,2,3) or ...
>>> a,b,c,d,e = (t)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 2 values to unpack

将不存在的值设置为None是可以的。基本上,我正在寻找一种更好(更密集)的方式来实现这个函数:

def unpack(t):
    if len(t) == 1:
        return t[0], None, None, None, None
    if len(t) == 2:
        return t[0], t[1], None, None, None
    if len(t) == 3:
        return t[0], t[1], t[2], None, None
    if len(t) == 4:
        return t[0], t[1], t[2], t[3], None
    if len(t) == 5:
        return t[0], t[1], t[2], t[3], t[4]
    return None, None, None, None, None

这个问题与 这个那个 有些相反。

1个回答

12

您可以使用以下方法添加其余元素:

a, b, c, d, e = t + (None,) * (5 - len(t))

演示:

>>> t = (1, 2)
>>> a, b, c, d, e = t + (None,) * (5 - len(t))
>>> a, b, c, d, e
(1, 2, None, None, None)

t = (1, 2) a, b, c, d, e, *_ = *t, *((None,) * 5) 这也是可行的。 - Subham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接