Creating slice notation from string

Ethan Furman ethan at stoneleaf.us
Wed Sep 2 19:27:16 EDT 2009


Bob van der Poel wrote:
>>For a one-liner:
>>
>>   x[slice(*map(int, x[1:-1].split(':')))]
> 
> 
> Thanks.
> 
> Almost works :)
> 
> For s="[2]" and s="[1:2]" it's fine. But, if I have
> 
> s = "[:2]" then I get:
> 
> 
>>>>x[slice(*[int(i) for i in s.strip("[]").split(":")])]
> 
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> ValueError: invalid literal for int() with base 10: ''
> 
> Similar problem with  [2:].
> 
> Ideas?

try:
     start, end = s[1:-1].split(':')
except ValueError:
     start = int(s[1:-1] # only one value specified
     end = start+1
start = int(start) if start else 0
end = int(end) if end else len(x)
x[start:end]

~Ethan~



More information about the Python-list mailing list