Create a slice using a tuple
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 val开发者_Go百科id
>>> 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.
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.
How about a[slice(*b)]
?
Is that sufficiently pythonic?
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)]
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
精彩评论