36

インデックスのリストで文字列を分割したいのですが、分割セグメントは 1 つのインデックスで始まり、次のインデックスの前で終わります。

例:

s = 'long string that I want to split up'
indices = [0,5,12,17]
parts = [s[index:] for index in indices]
for part in parts:
    print part

これは以下を返します:

長い紐 分割したい 分割し
たい紐分割したい紐 分割

たい

私は取得しようとしています:

分割し たい長い
文字列

4

3 に答える 3

50
s = 'long string that I want to split up'
indices = [0,5,12,17]
parts = [s[i:j] for i,j in zip(indices, indices[1:]+[None])]

戻り値

['long ', 'string ', 'that ', 'I want to split up']

以下を使用して印刷できます。

print '\n'.join(parts)

別の可能性(をコピーせずにindices)は次のとおりです。

s = 'long string that I want to split up'
indices = [0,5,12,17]
indices.append(None)
parts = [s[indices[i]:indices[i+1]] for i in xrange(len(indices)-1)]
于 2012-06-01T13:45:36.970 に答える
4

これはitertools モジュールを頻繁に使用する短い解決策です。このtee関数は、インデックスをペアごとに反復処理するために使用されます。詳細については、モジュールのレシピセクションを参照してください。

>>> from itertools import tee, izip_longest
>>> s = 'long string that I want to split up'
>>> indices = [0,5,12,17]
>>> start, end = tee(indices)
>>> next(end)
0
>>> [s[i:j] for i,j in izip_longest(start, end)]
['long ', 'string ', 'that ', 'I want to split up']

編集:これはインデックスリストをコピーしないバージョンなので、より高速になるはずです。

于 2012-06-01T13:52:37.160 に答える