python:将1/0的列表转换为布尔列表

时间:2017-02-02 19:40:38

标签: python

尝试将1/0的列表转换为布尔列表。

[1,0,1,0] == 1似乎不起作用。 %>%不起作用。

还有其他方式(希望非列表理解)吗?

5 个答案:

答案 0 :(得分:7)

在python 2中

 bool_list = map(bool,int_list)

在python 3中:

 bool_list = list(map(bool,int_list))

答案 1 :(得分:3)

[x==1 for x in list]

是一种常规方法,如果您的列表中包含01以外的条目,则可以轻松进行调整。

答案 2 :(得分:1)

尝试使用列表推导:

lst = [1, 0, 1, 0]
[bool(x) for x in lst]
=> [True, False, True, False]

答案 3 :(得分:1)

使用numpy模块的解决方案:

import numpy as np

l = np.array([1,0,1,0])
print((l > 0).tolist())

输出:

[True, False, True, False]

l > 0 - 如果数组l大于0,则会对其进行测试。这些测试的结果是结果数组

Boolean 元素

在处理多维数组时,这种方法也非常好:

l = np.array([[1,0,1,0], [1,1,1,1], [0,0,1,0]])
print((l > 0).tolist())

输出:

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

答案 4 :(得分:1)

就可读性而言,bool()map()是更好的选择。就速度而言,它们大约快一半:

对于Python 3.5.2(repl.it):

[not not x for x in lst]

比其他三个选项更快,但只比

稍快

[x==1 for x in lst]

对于Python 2.7.10(repl.it):

x==1边缘not not,但两者的速度仍然是其他两个的两倍。

not not优于x==1,因为它将适用于所有值,而不仅仅是01