2014-11-08 152 views
1

我想創建一個new_list這將只包含滿足條件的我old_list的項目,在標籤的數組索引3.我想是這樣的:基於創建從列表蟒蛇列表中,如果條件

new_list = [x for x in old_list if idx[x] == 3] 
IndexError: arrays used as indices must be of integer (or boolean) type 

但我得到以下錯誤,因爲idx是一個數組。我怎麼解決這個問題?

編輯:IDX是相等尺寸的陣列與我的含有標籤他們原始數據。所以基本上我想創建一個新的列表,將只包含我的原始列表中的項目,例如有標籤3.

我想要做這樣的事情: cluster_a = [old_list [x] for x in idx如果x == 3]

澄清:我的舊列表是包含3D陣列列表以及IDX是含有一個標籤爲我的列表中的每個3D陣列作爲我上述相同的大小數組。我正在盡力解釋這個問題。如果需要什麼,請告訴我。

This is the list with the 3d arrays

and this is the array with the labels

+0

*你在索引標籤數組中的索引是3 *?什麼索引?你能舉個例子嗎? – Kasramvd 2014-11-08 17:52:06

+0

我的意思是包含的值 – gelazari 2014-11-08 17:52:43

+0

你能告訴我們什麼'old_list'看起來像? – IanAuld 2014-11-08 17:53:16

回答

0

的問題不在於idx是一個列表,但可能是x是一個數組 - old_list必須包含一個列表作爲元素。您需要引用索引,而不是項目本身:

[old_list[x] for x in range(len(old_list)) if idx[x] == 3] 

這裏有一個小例子:

>>> old_list = [4,5,6] 
>>> idx = [3,2,3] 
>>> [old_list[x] for x in range(len(old_list)) if idx[x] == 3] 
[4, 6] 
+1

這標識(可能)問題,但不提供解決方案。 – chepner 2014-11-08 17:55:09

+0

這種情況下的解決方案是重新思考邏輯。它不可能告訴可以用暴露的代碼做不同的事情。 – WeaselFox 2014-11-08 17:55:57

+0

這就是爲什麼您在提供答案之前需要澄清實際問題的原因。 – chepner 2014-11-08 17:57:04

0

這個是什麼? :

new_list = [x for x in old_list if idx.index(x) == 3 ] 
+0

當我嘗試我得到一個AttributeError:'numpy.ndarray'對象沒有屬性'索引' – gelazari 2014-11-08 18:03:58

+0

'idx.​​index(x)'將返回idx中的第一個索引值是x,但根據OP,idx是標籤列表,所以我不認爲這是正確的。 – WeaselFox 2014-11-08 18:04:26

+0

@GeorgeLaza你可以添加您的列表到您的問題,請! – Kasramvd 2014-11-08 18:07:49