Split string by index python

I want to split a string by a list of indices, where the split segments begin with one index and end before the next one.

Example:

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

This will return:

long string that I want to split up
string that I want to split up
that I want to split up
I want to split up

I'm trying to get:

long
string
that
I want to split up

smci

30.4k18 gold badges110 silver badges145 bronze badges

asked Jun 1, 2012 at 13:43

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])]

returns

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

which you can print using:

print '\n'.join(parts)

Another possibility (without copying indices) would be:

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)]

answered Jun 1, 2012 at 13:45

eumiroeumiro

198k33 gold badges294 silver badges259 bronze badges

10

Here is a short solution with heavy usage of the itertools module. The tee function is used to iterate pairwise over the indices. See the Recipe section in the module for more help.

>>> 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']

Edit: This is a version that does not copy the indices list, so it should be faster.

Split string by index python

flywire

91110 silver badges31 bronze badges

answered Jun 1, 2012 at 13:52

schlamarschlamar

9,0223 gold badges37 silver badges76 bronze badges

3

You can write a generator if you don't want to make any modifications to the list of indices:

>>> def split_by_idx(S, list_of_indices):
...     left, right = 0, list_of_indices[0]
...     yield S[left:right]
...     left = right
...     for right in list_of_indices[1:]:
...         yield S[left:right]
...         left = right
...     yield S[left:]
... 
>>> 
>>> 
>>> s = 'long string that I want to split up'
>>> indices = [5,12,17]
>>> [i for i in split_by_idx(s, indices)]
['long ', 'string ', 'that ', 'I want to split up']

answered Aug 3, 2019 at 22:18

Split string by index python

Zhou ShaoZhou Shao

1161 silver badge4 bronze badges

0

Another solution (a bit more readable):

parts=[]; i2=len(s)  #--> i1 and i2 are 'startIndex' and 'endIndex'

for i1 in reversed(indices): parts.append( s[i1:i2] );  i2=i1

parts.reverse()

This reverses the indices and therefore starts splitting from the last index position to the 'endIndex' i2 (which is updated in every loop).

Of course the elements are in the wrong order than. That's why I reversed the result array at the end.

I think for beginners this is a bit more readable than the accepted answer.

answered Jul 21 at 21:10

Can you divide a string in Python?

String split is used to break the string into chunks. Python provides an in-built method called split() for string splitting. We can access the split string by using list or Arrays.

How do you split a string into substrings in Python?

Python split() Method Syntax When you need to split a string into substrings, you can use the split() method. In the above syntax: is any valid Python string, sep is the separator that you'd like to split on.

How do I split a string in a specific position?

To split a string at a specific index, use the slice method to get the two parts of the string, e.g. str. slice(0, index) returns the part of the string up to, but not including the provided index, and str. slice(index) returns the remainder of the string.

How do you split a string in Python with number of characters?

Use range() and slicing syntax to split a string at every nth character. Use a for-loop and range(start, stop, step) to iterate over a range from start to stop where stop is the len(string) and step is every number of characters where the string will be split.