我想创建一个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数组的标签。我正在尽力解释这个问题。如果需要的话请告诉我。
答案 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 ]