从左到右解压缩Python元组?

Ant*_*ier 19 python tuples python-3.x iterable-unpacking

是否有一个干净/简单的方法从右到右从右侧解压缩Python元组?

例如

j = 1,2,3,4,5,6,7

(1,2,3,4,5,6,7)

v,b,n = j[4:7] 
Run Code Online (Sandbox Code Playgroud)

我可以修改切片表示法v = j[6], b=j[5], n=j[4]吗?

我意识到我可以命令左侧获得所需的元素,但可能存在我只想从左到右解包元组的情况.

Mos*_*oye 50

这应该做:

v,b,n = j[6:3:-1]
Run Code Online (Sandbox Code Playgroud)

-1从...开始的步长值6


Agu*_*guy 14

如果你想保留原始索引(即不想打扰更改4和7到6和3),你也可以使用:

v, b, n = (j[4:7][::-1])
Run Code Online (Sandbox Code Playgroud)


joe*_*ick 10

 n,b,v=j[4:7]
Run Code Online (Sandbox Code Playgroud)

也会工作.您只需更改订单或返回的解压缩值即可

  • *我意识到我可以命令左侧获得所需的元素* (7认同)

Pad*_*ham 8

您可以在反转后忽略第一个并使用扩展的可迭代解包:

j = 1, 2, 3, 4, 5, 6, 7


_, v, b, n, *_ = reversed(j)

print(v, b, n)
Run Code Online (Sandbox Code Playgroud)

哪个会给你:

6 5 4
Run Code Online (Sandbox Code Playgroud)

或者,如果您想获得任意元素,您可以使用operator.itemgetter:

j = 1, 2, 3, 4, 5, 6, 7

from operator import itemgetter


def unpack(it, *args):
    return itemgetter(*args)(it)

v,b,n = unpack(j, -2,-3,-4)

print(v, b, n)
Run Code Online (Sandbox Code Playgroud)

itemgetter的优点是它可以在任何iterable上工作,元素不必是连续的.

  • 好吧,你也可以做`v,b,n = reverse(j [4:7])`而不使用扩展解包.这样做的好处是,如果`j`长达1000万个项目,解释器就不必创建包含所有其他元素的新列表. (3认同)