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

J4y*_*J4y 3 python

我有一个布尔列表,说:

x = [True, False, False, True]
Run Code Online (Sandbox Code Playgroud)

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

y = [1, 4]
Run Code Online (Sandbox Code Playgroud)

Mar*_*son 11

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

>>> x = [True, False, False, True]
>>> [index for index, element in enumerate(x, start=1) if element]
[1, 4]
Run Code Online (Sandbox Code Playgroud)

或者,如果您愿意使用NumPy并获得类型的结果numpy.ndarray,那么NumPy函数(几乎)可以满足您的需求:numpy.where.

>>> import numpy
>>> numpy.where(x)
(array([0, 3]),)
>>> numpy.where(x)[0] + 1
array([1, 4])
Run Code Online (Sandbox Code Playgroud)

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

如果您正在处理大量输入数据(特别是如果输入列表已经是NumPy数组的形式),则NumPy解决方案可能明显快于列表推导.


Kas*_*mvd 8

使用enumerate列表理解中:

>>> [i for i, j in enumerate(x, 1) if j]
[1, 4]
Run Code Online (Sandbox Code Playgroud)