Ответ 1
Если вы хотите сохранить исходные индексы (т.е. не хотите беспокоиться об изменении 4 и 7-6 и 3), вы также можете использовать:
v, b, n = (j[4:7][::-1])
Есть ли простой/простой способ распаковать кортеж 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]
?
Я понимаю, что могу просто заказать левую сторону, чтобы получить нужный элемент, но могут быть случаи, когда я просто хочу распаковать кортеж слева направо, я думаю.
Если вы хотите сохранить исходные индексы (т.е. не хотите беспокоиться об изменении 4 и 7-6 и 3), вы также можете использовать:
v, b, n = (j[4:7][::-1])
Это должно сделать:
v,b,n = j[6:3:-1]
Значение шага -1
, начинающееся с 6
n,b,v=j[4:7]
также будет работать. Вы можете просто изменить порядок или возвращенные распакованные значения
Вы можете игнорировать первый после реверса и использовать расширенную итеративную распаковку:
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 заключается в том, что он будет работать с любым итерабельным, а элементы не должны быть последовательными.
вы можете попробовать это,
-1 - средний вид с обратной стороны, с последним третьим элементом для последнего элемента
>>> v,b,n=j[-1:-4:-1]
>>> print 'v=',v,'b=',b,'n=',n
v= 7 b= 6 n= 5
>>>