2013-03-11 5 views
0

У меня есть что-то вроде этого:Как обеспечить уникальные значения в многомерном массиве?

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

В списке выше я хочу сделать что-то вроде этого:

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' не работает так, как вы думаете. Попробуйте следующее: '>>> 'blue' in [(0, 'blue')] False' – hughdbrown

+0

@hughdbrown спасибо, я исправил его. – varnie

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