Create a slice using a tuple

梦想的初衷 提交于 2019-12-03 15:04:19

问题


Is there any way in python to use a tuple as the indices for a slice? The following is not valid:

>>> 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]

It seems like a reasonably pythonic syntax so I am surprised that I can't do it.

(update) And the solution turns out to be:

>>> a[slice(*b)]
[5, 6, 7, 8, 9, 10, 11]

回答1:


You can use Python's *args syntax for this:

>>> a = range(20)
>>> b = (5, 12)
>>> a[slice(*b)]
[5, 6, 7, 8, 9, 10, 11]

Basically, you're telling Python to unpack the tuple b into individual elements and pass each of those elements to the slice() function as individual arguments.




回答2:


How about a[slice(*b)]?

Is that sufficiently pythonic?




回答3:


slice takes up to three arguments, but you are only giving it one with a tuple. What you need to do is have python unpack it, like so:

a[slice(*b)]



回答4:


Only one tiny character is missing ;)

In [2]: a = range(20)

In [3]: b = (5, 12)

In [4]: a[slice(*b)]
Out[4]: [5, 6, 7, 8, 9, 10, 11


来源:https://stackoverflow.com/questions/7071264/create-a-slice-using-a-tuple

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!