我有一个布尔列表,说:
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解决方案可能明显快于列表推导.
使用enumerate列表理解中:
>>> [i for i, j in enumerate(x, 1) if j]
[1, 4]
Run Code Online (Sandbox Code Playgroud)