2015-04-16 6 views
0

Это, вероятно, основной вопрос, но я даже не знаю, как правильно его сформулировать.Создайте третий список из списка индексов и списка строк

У меня есть два списка:

>>> indexes 
array([0, 2, 3, ..., 8, 5, 7]) # choices are between 0 and 8 

>>> colors 
['red', 'green', 'blue', 'orange', 'black', 'purple', 'yellow', 'grey', 'magenta'] 

Я хочу сделать что-то менее многословным и более вещий, чем это:

color_labels = [] 
for i in range(len(indexes)): 
    color_labels.append(colors[indexes[i]]) 

ответ

2

Поскольку один из списков уже numpy массив можно использовать numpy's причудливой индексации

color_labels = np.array(colors)[indexes] 
+0

Спасибо! То, что я искал. –

5

Try:

color_labels = [colors[i] for i in indexes] 

Это использует list comprehension.

Вы можете делать другие интересные вещи с пониманием! Если вы используете parens () вместо квадратных скобок, вы получаете generator expression, что похоже на понимание списка, за исключением того, что оно получает ленивую оценку. И если вы используете фигурные скобки {} и двоеточие :, вы получаете dictionary comprehension, что позволяет быстро преобразовывать списки кортежей и т. Д. В словари.

0

Ответ z0r, ​​использующий список, является, безусловно, самым читаемым.

Однако вы также можете использовать map функцию:

color_labels = map(colors.__getitem__, indexes) 
0

Или lambda:

print map(lambda x: colors[x], indexes) 
Смежные вопросы