从索引获取布尔列表中的True值-python

时间:2018-12-11 03:36:58

标签: python list

我如何计算此处描述的内容的倒数:Getting indices of True values in a boolean list? 当我尝试搜索“如何从整数索引中获取布尔列表中的真值”时,总是会出现上述链接,但是它为我提供了布尔列表中真实值的索引,这与我想要的相反...

例如,来自:

t = [4, 5, 7]
count = 16

我想获得:

[False, False, False, False, True, True, False, True, False, False, False, False, False, False, False, False]

所有值都被索引为0,这与Python预期的一样。 我猜我的问题是重复的,但是每次尝试记住如何进行操作时都找不到我要查找的内容真是太烦人了,我决定问一个新问题,因此我的Google搜索希望下次会出现此帖子。

4 个答案:

答案 0 :(得分:3)

使用具有条件的列表理解:

print([True if i in t else False for i in range(count)])

更短:

print([i in t else False for i in range(count)])

答案 1 :(得分:3)

您可以使用列表推导。我建议您将t变成set以便进行O(1)查找:

t_set = set(t)
res = [i in t_set for i in range(count)]

答案 2 :(得分:2)

如何?

In [6]: holderplace =[False for i in range(count)]

In [7]: for i in t:
   ...:     holderplace[i-1]=True
   ...:     

In [8]: holderplace
Out[8]: 
[False,
 False,
 False,
 True,
 True,
 False,
 True,
 False,
 False,
 False,
 False,
 False,
 False,
 False,
 False,
 False]

In [9]: 

答案 3 :(得分:0)

您也可以尝试使用map()

list(map(lambda x: x in t, range(count)))
# [False, False, False, False, True, True, False, True, False, False, False, False, False, False, False, False]

也许值得将t转换为集合,因为查找是O(1)而不是O(N)。

您也可以使用__contains__()

list(map(t.__contains__, range(count)))