2016-01-24 39 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

難道您發佈在解決這個問題的嘗試,即使結果不*易*或* Python的*?目前,您沒有付出任何努力會對您的問題產生不利影響。 –

+0

是編輯我的問題 – gudlife

+0

看到這個職位:http://stackoverflow.com/questions/12229064/mapping-over-values-in-a-python-dictionary(你甚至谷歌這個?) – 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

對於你的確切問題(如果你拒絕使用地圖,列表解析,字典或任何其他簡單和Pythonic方法外Numpy)爲什麼不只是繼續兩個額外的行?

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

這是因爲我真正的問題有很多數字需要改變。 – gudlife

+0

說真的,你谷歌這個:http://stackoverflow.com/questions/3403973/fast-replacement-of-values-in-a-numpy-array – Kim

0

運用l1l2建成了替換功能:

>>> 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]]