Mike
Mike

Reputation: 4405

Replace items in list, python

I have a list of strings like this:

Item_has_was_updated_May_2010
Item_updated_Apr_2011
Item_got_updated_Sept_2011

I want to iterate through the list of string and update the last 2 parts of the string. The month and the year. The rest of the string I want to remain the same. The month and year will be taken from variables I have set earlier in my script, so let's call the month x and the year y.

My approach is to:

  1. Iterate through the list of strings
  2. Split each string by "_"
  3. Replace the last 2 items
  4. Join the items back together with the replaced items

The month and year will be taken from variables I have set earlier in my script, so let's call the month x and the year y.

If anyone can suggest a an approach, it is appreciated.

Upvotes: 4

Views: 2109

Answers (3)

kiranmai
kiranmai

Reputation: 17

lst = [
   'Item_has_was_updated_May_2010',
   'Item_updated_Apr_2011',
   'Item_got_updated_Sept_2011',
]
month='Sep';year='2012'
for s in lst:
        list=s.split('_')
        list[-2:]=(month,year)
        r=''
        for a in list:
                r=r+"%s_"%a
        r=r[:-1]
        print r

Upvotes: 2

Mark Byers
Mark Byers

Reputation: 838076

You can do it without regular expressions by using str.rsplit:

yourlist = [s.rsplit('_', 2)[0] + '_' + x + '_' + y for s in yourlist]

See it working online: ideone


If you want to use formatting instead of string concatenation, try this:

yourlist = ['{}_{}_{}'.format(s.rsplit('_', 2)[0], x, y) for s in yourlist]

See it working online: ideone

Upvotes: 9

Jay M
Jay M

Reputation: 4287

I don't think you really need 're'.
You could use something like this:

m="dec"
y=2012
l=["Item_has_was_updated_May_2010",
    "Item_updated_Apr_2011",
    "Item_got_updated_Sept_2011"]
r=[]
for s in l:
    t=s.split("_")
    r.append("_".join(t[:-2])+"_%s_%s"%(m,y))

Upvotes: 2

Related Questions