2016-01-24 2 views
-3

У меня есть список номеров следующим образом:Как изменить список номеров

given = [[0,5,4,9,0], 
     [2,1,4,9,9]] 

Я должен изменить числа следующим образом:

0>>0 
1>>1 
2>>2 
3>>3 
4>>3 
5>>4 
9>>5 

Или от l1 до l2.

l1 = [0,1,2,3,4,5,9] 
l2 = [0,1,2,3,3,4,5] 

Ожидаемый ответ:

ans = [[0,4,3,5,0], 
     [2,1,3,5,5]] 

Как простой способ сделать это?

Мой суд был загрязнен:

given[given==4]=3 
and so on. 

Я бы предпочел Numpy метод.

+2

Не могли бы вы опубликовать ваши попытки решить эту проблему, даже если результаты не * легко * или * вещий *? Прямо сейчас отсутствие каких-либо усилий с вашей стороны отрицательно сказывается на вашем вопросе. –

+0

да отредактировал мой вопрос – gudlife

+0

Посмотреть это сообщение: http://stackoverflow.com/questions/12229064/mapping-over-values-in-a-python-dictionary (вы даже это Google?) – Kim

ответ

1

Используйте словарь в качестве переводчика:

>>> given = [[0,5,4,9,0], 
...   [2,1,4,9,9]] 
>>> translation = {4:3, 5:4, 9:5} 
>>> [[translation.get(x, x) for x in sub] for sub in given] 
[[0, 4, 3, 5, 0], [2, 1, 3, 5, 5]] 

Вам нужно только поставить отображение для чисел, которые на самом деле изменить, потому что dict.get(key, default) возвращает заданное значение по умолчанию, если ключ не найден.

+0

спасибо, но я бы предпочел, чтобы я предпочитал метод numpy. – gudlife

+0

@usagi жаль, что я не знаю, как это сделать в numpy. Возможно, позже я натолкнулся на небольшое решение. – timgeb

0

Для вашего точного вопроса (и если вы отказываетесь от использования карт, списков, словарей или любого другого простого и питонического метода вне Numpy), почему бы просто не продолжить выполнение двух дополнительных строк?

given[given==4]=3 
given[given==5]=4 
given[given==9]=5 
+0

Это потому, что моя реальная проблема имеет много чисел, которые нужно изменить. – gudlife

+0

Серьезно, вы сделали это Google: http://stackoverflow.com/questions/3403973/fast-replacement-of-values-in-a-numpy-array – Kim

0

Использование функции замены, построенный из l1 и l2:

>>> given = [[0,5,4,9,0], [2,1,4,9,9]] 
>>> l1 = [0,1,2,3,4,5,9] 
>>> l2 = [0,1,2,3,3,4,5] 

>>> change = dict(zip(l1, l2)).get 
>>> [map(change, g) for g in given] 
[[0, 4, 3, 5, 0], [2, 1, 3, 5, 5]] 
Смежные вопросы