在python中将boolean转换为整数位置

时间:2016-08-18 17:22:48

标签: python

我有一个布尔列表,比如说:

x = [True, False, False, True]

如何将此列表转换为整数位置,以便获得结果:

y = [1, 4]

3 个答案:

答案 0 :(得分:11)

您可以将列表推导与enumerate函数结合使用,例如:

>>> x = [True, False, False, True]
>>> [index for index, element in enumerate(x, start=1) if element]
[1, 4]

或者,如果您愿意使用NumPy并获得numpy.ndarray类型的结果,那么NumPy功能(几乎)可以满足您的需求:numpy.where。< / p>

>>> import numpy
>>> numpy.where(x)
(array([0, 3]),)
>>> numpy.where(x)[0] + 1
array([1, 4])

上面一行中的奇怪[0]是因为numpy.where总是在元组中返回其结果:输入数组的每个维度的元组的一个元素。由于在这种情况下输入数组是一维的,我们并不真正关心外部元组结构,因此我们使用[0]索引操作来提取我们需要的实际数组。 + 1可以从Python / NumPy标准的基于0的索引到基于1的索引,它看起来就像你想要的一样。

如果您正在处理大量输入数据(特别是如果输入列表已经是NumPy数组的形式),则NumPy解决方案可能比列表理解速度快得多。

答案 1 :(得分:8)

在列表理解中使用enumerate

>>> [i for i, j in enumerate(x, 1) if j]
[1, 4]

答案 2 :(得分:2)

一个简单的单行将是:

[i+1 for i in range(len(x)) if x[i]]