Slicing a list using a variable, in Python

前端 未结 5 2021
攒了一身酷
攒了一身酷 2020-12-05 22:36

Given a list

a = range(10)

You can slice it using statements such as

a[1]
a[2:4]

However, I want to do th

相关标签:
5条回答
  • 2020-12-05 23:05

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

    0 讨论(0)
  • 2020-12-05 23:13
    >>> a=range(10)
    >>> i=[2,3,4]
    
    >>> a[i[0]:i[-1]]
    range(2, 4)
    
    >>> list(a[i[0]:i[-1]])
    [2, 3]
    
    0 讨论(0)
  • 2020-12-05 23:27

    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.

    0 讨论(0)
  • 2020-12-05 23:28

    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]
    
    0 讨论(0)
  • 2020-12-05 23:29

    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.

    0 讨论(0)
提交回复
热议问题