基于if条件从python中的列表创建列表

时间:2014-11-08 17:49:55

标签: python list

我想创建一个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 if x == 3]

澄清:我的旧列表是一个包含3d数组的列表,idx是一个大小相等的数组,包含我前面列出的每个3d数组的标签。我正在尽力解释这个问题。如果需要的话请告诉我。

This is the list with the 3d arrays

and this is the array with the labels

2 个答案:

答案 0 :(得分: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 :(得分:0)

这个怎么样? :

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