Slicing a list using a variable, in Python
that's what slice()
is for:
a = range(10)
s = slice(2,4)
print a[s]
That's the same as using a[2:4]
.
Why does it have to be a single variable? Just use two variables:
i, j = 2, 4
a[i:j]
If it really needs to be a single variable you could use a tuple.
With the assignments below you are still using the same type of slicing operations you show, but now with variables for the values.
a = range(10)
i = 2
j = 4
then
print a[i:j]
[2, 3]
>>> a=range(10)
>>> i=[2,3,4]
>>> a[i[0]:i[-1]]
range(2, 4)
>>> list(a[i[0]:i[-1]])
[2, 3]
I ran across this recently, while looking up how to have the user mimic the usual slice syntax of a:b:c
, ::c
, etc. via arguments passed on the command line.
The argument is read as a string, and I'd rather not split on ':'
, pass that to slice()
, etc. Besides, if the user passes a single integer i
, the intended meaning is clearly a[i]
. Nevertheless, slice(i)
will default to slice(None,i,None)
, which isn't the desired result.
In any case, the most straightforward solution I could come up with was to read in the string as a variable st
say, and then recover the desired list slice as eval(f"a[{st}]")
.
This uses the eval() builtin and an f-string where st
is interpolated inside the braces. It handles precisely the usual colon-separated slicing syntax, since it just plugs in that colon-containing string as-is.