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.