2013-03-11 1 views
0

나는 이런 식으로 뭔가를다차원 배열에서 고유 한 값을 보장하는 방법은 무엇입니까? 나는 이런 식으로 뭔가하고 싶은 위</p> <pre><code>color_names = ('red', 'blue', 'orange', 'red') </code></pre> <p>목록에서 :

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

모든 색상이 고유해야을, 내가 두 번째 '빨간색을 무시하는 이유 이잖아 '첫 번째 목록에. 현재 솔루션에는 많은 루프와 조건이 있습니다. 나는 더 나은 해결책을 찾고있다. 당신이 순서는 중요하지 않습니다 말했다 때문에

+1

합니까 위해 물질을? 그렇다면 어떤 요소가 선택 되었습니까? –

+0

색상을 키로하여 사전을 사용하는 것이 더 나아 졌습니까? 그래서 colors = { 'red': 0, 'blue': 1, 'orange': 2}? 그렇지 않으면 수동으로 테스트를 구현해야합니다. –

+0

이 목록이 1D 일 때 제목이 "다차원 배열"이라고 말하는 이유는 무엇입니까? –

답변

6

, 당신은 간단하게 수행 할 수 있습니다

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

실제 목록으로 만들면 완벽 할 것입니다. – eumiro

+0

@eumiro : 고마워, 잘 잡아라! –

+2

@vkuzma -'set'은 색을 독특하게 만듭니다 :'set ([ 'red', 'blue', 'red'])'결과는 두 개의 다른 요소를 가진 집합으로 만듭니다. – eumiro

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')]에서'>>> 'blue'] False' – hughdbrown

+0

@hughdbrown 고마워, 고쳐 줬어. – varnie

관련 문제