Создайте срез, используя кортеж
Есть ли какой-либо способ в python использовать кортеж в качестве индексов для среза?
Недопустимо следующее:
>>> a = range(20)
>>> b = (5, 12) # my slice indices
>>> a[b] # not valid
>>> a[slice(b)] # not valid
>>> a[b[0]:b[1]] # is an awkward syntax
[5, 6, 7, 8, 9, 10, 11]
>>> b1, b2 = b
>>> a[b1:b2] # looks a bit cleaner
[5, 6, 7, 8, 9, 10, 11]
Похоже, что это довольно пифонический синтаксис, поэтому я удивлен, что не могу этого сделать.
(обновление)
И решение получится:
>>> a[slice(*b)]
[5, 6, 7, 8, 9, 10, 11]
Ответы
Ответ 1
Для этого можно использовать синтаксис Python *args
:
>>> a = range(20)
>>> b = (5, 12)
>>> a[slice(*b)]
[5, 6, 7, 8, 9, 10, 11]
В принципе, вы говорите Python, чтобы распаковать кортеж b
в отдельные элементы и передать каждый из этих элементов функции slice()
в качестве отдельных аргументов.
Ответ 2
Как насчет a[slice(*b)]
?
Достаточно ли это pythonic?
Ответ 3
slice
принимает до трех аргументов, но вы даете только один кортеж. Что вам нужно сделать, так это распаковать python так:
a[slice(*b)]
Ответ 4
Отсутствует только один крошечный символ;)
In [2]: a = range(20)
In [3]: b = (5, 12)
In [4]: a[slice(*b)]
Out[4]: [5, 6, 7, 8, 9, 10, 11