使用bool list从另一个列表中检索元素 - Python

时间:2015-09-02 09:23:46

标签: python list python-2.7

我遇到这种情况:

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

2 个答案:

答案 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])