2015-04-16 125 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'] 

我想做的事情比這個更簡潔和更Python的東西:

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

嘗試:

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) 
相關問題