是否可以获得切片的索引值(开始,结束)?例如
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 [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'
换句话说,我不需要子字符串本身,而只需要索引作为元组(开始,结束)。
你可以像这样使用python的slice
对象:
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)
编辑:使用 Eric 的改进来使用 None 而不是 len(s) 作为 stop 参数
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)
定义自己的功能:
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)