p priyanka
p priyanka

Reputation: 129

How to split at a particular word in list using python

Here is my list,

['Query Date                                :September 07, 2017',
 'Address                                    :Aguila arizona',
 'Latitude                                :33.9428069', 'Longitude                                :-113.1740805',
 'Elevation                                :2170.4 Feet',
 'Elevation Limitation:  ASCE 7* Ground Snow **LoadElevation** 3,000 feet: Ground Snow Load is0 ',
 'Elevation > 3,000 and 4,500 feet: Ground Snow Load is5 ',
 'Elevation > 4,500 and 5,400 feet: Ground Snow Load is10 ',
 '']

I want to split on a particular word(ie LoadElevation) which is at 5th element in the list. So after Load it should get splitted.

Output should be like

['Query Date                                :September 07, 2017',
 'Address                                    :Aguila arizona', 'Latitude                                :33.9428069',
 'Longitude                                :-113.1740805', 'Elevation                                :2170.4 Feet',
 'Elevation Limitation:  ASCE 7* Ground Snow **Load',
 'Elevation** 3,000 feet: Ground Snow Load is0 ', 
 'Elevation > 3,000 and 4,500 feet: Ground Snow Load is5 ',
 'Elevation > 4,500 and 5,400 feet: Ground Snow Load is10 ', 
 '']

Guys help me. Thanks in advance.

Upvotes: 1

Views: 107

Answers (3)

RomanPerekhrest
RomanPerekhrest

Reputation: 92894

Short solution using re.findall() function:

import re
l = ['Query Date                                :September 07, 2017', 'Address                                    :Aguila arizona', 'Latitude                                :33.9428069', 'Longitude                                :-113.1740805', 'Elevation                                :2170.4 Feet', 'Elevation Limitation:  ASCE 7* Ground Snow LoadElevation 3,000 feet: Ground Snow Load is0 ', 'Elevation > 3,000 and 4,500 feet: Ground Snow Load is5 ', 'Elevation > 4,500 and 5,400 feet: Ground Snow Load is10 ', '']
l[5:6] = re.findall(r'.*\Load|Elevation.*', l[5])

print(l)

The output:

['Query Date                                :September 07, 2017', 'Address                                    :Aguila arizona', 'Latitude                                :33.9428069', 'Longitude                                :-113.1740805', 'Elevation                                :2170.4 Feet', 'Elevation Limitation:  ASCE 7* Ground Snow Load', 'Elevation 3,000 feet: Ground Snow Load is0 ', 'Elevation > 3,000 and 4,500 feet: Ground Snow Load is5 ', 'Elevation > 4,500 and 5,400 feet: Ground Snow Load is10 ', '']

Upvotes: 1

Nirmi
Nirmi

Reputation: 356

For generic you can try followinig code:

import re
for index,line in enumerate(list1):
     if("LoadElevation" in line):
             newList = re.split("LoadElevation",line)
             new_index = index
             list1 = list1[:index]+ [ele + "Load" if index1%2==0 else "Elevation"+ele for index1,ele in enumerate(newList)] + list1[index+1:]

print list1 #['Query Date                                :September 07, 2017', 'Address                                    :Aguila arizona', 'Latitude                                :33.9428069', 'Longitude                                :-113.1740805', 'Elevation                                :2170.4 Feet', 'Elevation Limitation:  ASCE 7* Ground Snow **Load', 'Elevation** 3,000 feet: Ground Snow Load is0 ', 'Elevation > 3,000 and 4,500 feet: Ground Snow Load is5 ', 'Elevation > 4,500 and 5,400 feet: Ground Snow Load is10 ', '']

Upvotes: 0

timgeb
timgeb

Reputation: 78780

Asumming your "splitting element" occurs only once, get its index, slice up to that index, insert whatever you want, then add the rest of the list.

>>> a = [1, 2, 'SplitHere', 3, 4]
>>> idx = a.index('SplitHere')
>>> a[:idx] + ['Split', 'Here'] + a[idx+1:]
[1, 2, 'Split', 'Here', 3, 4]

I hardcoded the split because you did not give any rules or criteria by which to split the target word.

Upvotes: 0

Related Questions