Разбиение строки по списку индексов
Я хочу разбить строку на список индексов, где сегменты split начинаются с одного индекса и заканчиваются перед следующим.
Пример:
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
Это вернет:
длинная строка, которую я хочу разделить
строка, которую я хочу разделить что я хочу разделить Я хочу разделить
Я пытаюсь получить:
долго
строка
что
Я хочу разделить
Ответы
Ответ 1
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)]
Ответ 2
Вот короткое решение с интенсивным использованием модуля 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)
>>> end.next()
0
>>> [s[i:j] for i,j in izip_longest(start, end)]
['long ', 'string ', 'that ', 'I want to split up']
Изменить. Это версия, которая не копирует список индексов, поэтому она должна быть быстрее.