6

スライスのインデックス値 (開始、終了) を取得することは可能ですか? 例えば

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'

つまり、部分文字列自体は必要なく、タプル (start,end) としてのインデックスのみが必要です。

4

3 に答える 3

16

次のように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)

EDIT:Ericの改善を使用して、停止引数にlen(s)の代わりにNoneを使用します

于 2012-11-11T20:42:30.433 に答える
3
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)
于 2012-11-11T20:42:54.643 に答える
0

独自の関数を定義します:

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)
于 2012-11-11T20:38:56.050 に答える