我遇到这种情况:
main_list = [12, 10, 30, 10, 11,10, 31]
get_indices = [1, 0, 1, 1, 0, 0, 0]
我想要做的是,根据main_list
中的布尔值从get_indices
中提取元素。
我尝试了以下但不起作用:
result = main_list[bool(get_indices)]
print result
10
应为12, 30, 10
答案 0 :(得分:3)
我刚遇到for (int j = 0; j < collectionData.length; j++) {
indexList.add(cd.indexOf(searchName.get(i).toString()));
break;
}
,它最适合这项任务。
compress()
生成一个有效循环的迭代器。
compress()
答案 1 :(得分:2)
您可以使用列表理解 -
result = [x for i, x in enumerate(main_list) if get_indices[i]]
您不需要使用bool()
,0
在布尔上下文中被视为类似False,而非零的任何内容都是类似True。
示例/演示 -
>>> main_list = [12, 10, 30, 10, 11,10, 31]
>>> get_indices = [1, 0, 1, 1, 0, 0, 0]
>>> result = [x for i, x in enumerate(main_list) if get_indices[i]]
>>> result
[12, 30, 10]
或者,如果您真的想要与您的方法类似的东西,那么您可以说 -
但如果我能够让我的方法工作,我也可以做例如:result = main_list [~bool(get_indices)]得到:[10,11,10,31]
您可以使用numpy
,将列表转换为numpy数组。示例 -
In [30]: import numpy as np
In [31]: main_list = [12, 10, 30, 10, 11,10, 31]
In [32]: get_indices = [1, 0, 1, 1, 0, 0, 0]
In [33]: main_array = np.array(main_list)
In [34]: get_ind_array = np.array(get_indices).astype(bool)
In [35]: main_array[get_ind_array]
Out[35]: array([12, 30, 10])
In [36]: main_array[~get_ind_array]
Out[36]: array([10, 11, 10, 31])