2013-02-28 2 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

Как примечание стороны, ваш код будет работать, если вы сделали 'для п, к в Перечислять (ключи):' – mgilson

ответ

5

Нет необходимости для регулярного выражения здесь ... просто нарезка будет делать трюк:

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

Это на самом деле не на месте, но это может быть сделано на месте легко:

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

«, но это может быть сделано на месте легко »- я думаю, вы должны сказать, как :) –

+0

спасибо! он работал – OOrion

+0

@frb - я сделал ... – mgilson

1

Вы получаете сообщение об ошибке, потому что keys представляет собой список строк длиной 4, так

for n,k in keys: 

не может работать, как строка длиной не могут быть распакованы в переменных n и k.

Во всяком случае, вот еще одна альтернатива:

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

Престижность для выкапывания 'slice'. Я действительно был удивлен, когда это сработало. Я бы написал «map (itemgetter (slice (None, -2)), keys), который, я считаю, тоже сработал бы. – mgilson

+0

А также, вы * можете * использовать последовательность распаковки строк, как и в списках или кортежах. (строки - последовательности в конце концов). Вот почему OP получает «ValueError: ** слишком много значений для распаковки **» вместо '' TypeError: ... is is iterable » – mgilson

+0

@mgilson Спасибо! Я отредактировал, чтобы уточнить это. – arshajii

Смежные вопросы