Python - get slice index

Is it possible to get the index values ​​(beginning, end) of a slice? for instance

In [1]: s = "Test string" In [2]: s[-6:] # get slice indexes (5,11) Out[2]: 'string' In [3]: s = "Another test string" In [4]: s[8:] # get slice indexes (8,19) Out[4]: 'test string' 

In other words, I do not need the substring itself, but only indexes as a tuple (beginning, end).

+4
source share
3 answers

You can use a python slice object, for example:

 In [23]: s = "Test string" In [24]: slice(-6, None).indices(len(s)) Out[24]: (5, 11, 1) In [25]: s = "Another test string" In [26]: slice(8, None).indices(len(s)) Out[26]: (8, 19, 1) 

EDIT: using Eric enhancement to use None instead of len (s) for stop argument

+14
source
 class SliceGetter(object): def __init__(self, inner): self.size = len(inner) def __getitem__(self, index): return index.indices(self.size)[:2] 
 >>> SliceGetter("Test string")[-6:] (5, 11) >>> SliceGetter("Another test string")[8:] (8, 19) 
+2
source

define your own function:

 In [119]: def start_end(strs,x): if x>0: return x,len(strs) else: return len(strs)+x,len(strs) .....: In [120]: start_end("Test String",-6) Out[120]: (5, 11) In [122]: func("Another test string",8) Out[122]: (8, 19) 
0
source

Source: https://habr.com/ru/post/1445386/


All Articles