2013-03-11 34 views
0

我有這樣的事情:如何確保多維數組中的唯一值?

color_names = ('red', 'blue', 'orange', 'red') 

從上面的列表中我想做的事情是這樣的:

colors = [(0, 'red'), (1, 'blue'), (2, 'orange')] 

每個顏色應該是唯一的,這就是爲什麼我要忽略第二個「紅色'在第一個列表中。 我目前的解決方案有很多循環和條件。我正在尋找更好的解決方案。

+1

是否爲了此事?如果是這樣,哪個元素被選中? – 2013-03-11 14:28:05

+0

用顏色作爲關鍵詞,你會使用字典更好嗎? so colors = {'red':0,'blue':1,'orange':2}?否則,你將不得不手動實施測試 – 2013-03-11 14:28:22

+0

爲什麼你的標題說「多維數組」,當這個列表只有一維? – 2013-03-11 14:29:46

回答

6

既然你說這個順序並不重要,你可以簡單地做:

list(enumerate(set(color_names))) 
+1

使它成爲一個真正的清單,它將是完美的。 – eumiro 2013-03-11 14:33:22

+0

@eumiro:謝謝,趕上! – 2013-03-11 14:34:40

+2

@vkuzma - 'set'使顏色具有唯一性:'set(['red','blue','red'])'結果爲具有兩個不同元素的集合。 – eumiro 2013-03-11 14:35:56

3

如果順序並不重要:

color_names = ('red', 'blue', 'orange', 'red') 
colors = [(i, color) for i, color in enumerate(set(color_names))] 

或者:

colors = list(enumerate(set(color_names))) 

set()品牌該列表包含獨特的元素。

0

太羅嗦了,但是它的工作原理:

color_names = ('red', 'blue', 'orange', 'red') 
i = 0 
res = [] 
for item in set(color_names): 
    res.append((i,item)) 
    i+=1 

print res 
+0

如果你正在迭代通過'set',你不需要檢查元素是否已經在'res'中。另外,「in」不符合你的想法。試試這個:>>>藍色在[(0,'blue')] False' – hughdbrown 2013-03-11 14:43:29

+0

@hughdbrown謝謝,我糾正了它。 – varnie 2013-03-11 14:45:04

相關問題