2013-02-28 137 views
1

我試圖刪除下面列表中每個項目的最後2位數字。如何刪除列表中元素的最後2個字符?

keys = ['2013', '1101', '1201', '1301', '1401', '1402', '1403', '2100', '2150', '3201', '5201', '5301', '9810', '9820', '9830', '2013', '1101', '1201', '1202', '1301', '1304', '1401', '1402', '1403', '2100', '2150', '3401', '5201', '5301', '9810', '9820', '9830', '2013', '1101', '5201', '2013', '1101', '1201', '1401', '1402', '1403', '2100', '5201', '5301', '5402', '9810', '9820', '9830', '2013'] 

for n,k in keys: 
    keys[n] = keys[n][0]+keys[n][1] 

我不斷收到ValueError異常:值過多解壓

+1

作爲一個側面說明,你的代碼也將工作,如果你沒有'n個,在歷數(鍵)K:' – mgilson 2013-02-28 21:28:29

回答

5

無需這裏正則表達式...簡單的切片將這樣的伎倆:

keys = [k[:-2] for k in keys] 

這是不實際但可以輕鬆製作:

keys[:] = [k[:-2] for k in keys] 
+0

「,但它可以就地進行輕鬆「 - 我想你應該說如何:) – 2013-02-28 21:13:19

+0

謝謝!它工作 – OOrion 2013-02-28 21:16:08

+0

@frb - 我沒有... – mgilson 2013-02-28 21:16:26

1

您收到錯誤,因爲keys是長度爲4的字符串列表,所以

for n,k in keys: 

不能工作,如長度的字符串不能解壓到變量nk

總之,這裏的另一種選擇:

map(operator.itemgetter(slice(-2)), keys) 
+1

挖掘'切片'的榮譽。當它工作時我真的很驚訝。我會寫'map(itemgetter(slice(None,-2)),keys)',我相信這也會起作用。 – mgilson 2013-02-28 21:20:37

+0

而且,你可以使用字符串的序列解包,就像你在列表或元組中一樣。 (字符串畢竟是序列)。這就是爲什麼OP得到一個「ValueError:**太多的值來解開**」而不是「TypeError:...是不可迭代的」 – mgilson 2013-02-28 21:29:55

+0

@mgilson謝謝!我編輯澄清。 – arshajii 2013-02-28 21:50:45

相關問題