2014-11-08 88 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