2012-05-11 160 views
4

我有這樣一個字符串列表:替換列表項,蟒蛇

Item_has_was_updated_May_2010 
Item_updated_Apr_2011 
Item_got_updated_Sept_2011 

我想通過字符串列表進行迭代和更新的最後2個部分的字符串。月份和年份。剩下的字符串我想保持不變。月份和年份將從我之前在腳本中設置的變量中獲取,因此我們稱之爲月x和y年。

我的做法是:

  1. 迭代通過串
  2. 分割每個字符串列表中的「_」
  3. 將最後2項
  4. 加入項背連同取代項目

月份和年份將從我之前在腳本中設置的變量中獲取,因此我們稱之爲月xa第y年。

如果任何人都可以建議一種方法,這是值得讚賞的。

+1

什麼是你要求什麼呢?您已經概述了一個聽起來合理的過程,您是否嘗試過實施它? – Jesse

+0

在Python中列出一個不可變的,你不能改變它們。
但是,您可以將它們複製到新列表中,然後進行更改。 –

+2

列表是可變的。字符串是不可改變的。 –

回答

9

您可以通過使用str.rsplit做沒有正則表達式:

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

看到它聯機工作:ideone


如果你想使用的格式,而不是字符串連接,試試這個:

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

看到它在線工作:ideone

+3

也可以做''_'。join(s.split('_')[: - 2] + [x,y])' –

+0

@NiklasB .: +1也行。它稍微簡潔一些。與使用'rsplit'相比,它做了一些不必要的分割和連接。考慮到示例字符串的大小,可能不是一個大問題。 –

+0

我認爲它甚至可能比字符串連接(它需要創建一個新的字符串4次)更快'格式'方法當然也可以,以及:) –

2

我不認爲你真的需要'重新'。
你可以使用這樣的事情:

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)) 
+1

'r = []; for s in l:r.append(...)'模式正是列表理解的好處:) –

2
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