如何从左到右解包一个元组?
How to unpack a tuple from left to right?
是否有 clean/simple 方法从左到右解压右侧的 Python 元组?
例如
j = 1,2,3,4,5,6,7
(1,2,3,4,5,6,7)
v,b,n = j[4:7]
我可以修改切片符号以便 v = j[6], b=j[5], n=j[4]
吗?
我意识到我可以只命令左侧以获得所需的元素,但在某些情况下我可能只想从左到右解压元组。
应该这样做:
v,b,n = j[6:3:-1]
步长值 -1
从 6
开始
n,b,v=j[4:7]
也可以。您可以只更改顺序或返回的解压缩值
反转后可以忽略第一个,使用extended iterable unpacking:
j = 1, 2, 3, 4, 5, 6, 7
_, v, b, n, *_ = reversed(j)
print(v, b, n)
哪个会给你:
6 5 4
或者,如果您想获取任意元素,您可以使用 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)
itemgetter 的优点是它适用于任何可迭代对象,并且元素不必是连续的。
如果您想保留原始索引(即不想费心将 4 和 7 更改为 6 和 3),您还可以使用:
v, b, n = (j[4:7][::-1])
你可以试试这个,
-1 表示从反方向看,从最后的第 3 个元素到最后一个元素
>>> v,b,n=j[-1:-4:-1]
>>> print 'v=',v,'b=',b,'n=',n
v= 7 b= 6 n= 5
>>>
是否有 clean/simple 方法从左到右解压右侧的 Python 元组?
例如
j = 1,2,3,4,5,6,7
(1,2,3,4,5,6,7)
v,b,n = j[4:7]
我可以修改切片符号以便 v = j[6], b=j[5], n=j[4]
吗?
我意识到我可以只命令左侧以获得所需的元素,但在某些情况下我可能只想从左到右解压元组。
应该这样做:
v,b,n = j[6:3:-1]
步长值 -1
从 6
n,b,v=j[4:7]
也可以。您可以只更改顺序或返回的解压缩值
反转后可以忽略第一个,使用extended iterable unpacking:
j = 1, 2, 3, 4, 5, 6, 7
_, v, b, n, *_ = reversed(j)
print(v, b, n)
哪个会给你:
6 5 4
或者,如果您想获取任意元素,您可以使用 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)
itemgetter 的优点是它适用于任何可迭代对象,并且元素不必是连续的。
如果您想保留原始索引(即不想费心将 4 和 7 更改为 6 和 3),您还可以使用:
v, b, n = (j[4:7][::-1])
你可以试试这个,
-1 表示从反方向看,从最后的第 3 个元素到最后一个元素
>>> v,b,n=j[-1:-4:-1]
>>> print 'v=',v,'b=',b,'n=',n
v= 7 b= 6 n= 5
>>>