我在python中有一个很大的列表,就像小例子一样,想要制作一个布尔的numpy数组。
小例子:
li = ['FALSE', 'FALSE', 'TRUE', 'FALSE', 'FALSE', 'FALSE']
I tried to change it using the following line:
out = array(li, dtype = bool)
然后我得到了这个输出:
out = array([ True, True, True, True, True, True], dtype=bool)
但问题是他们都是真的。如何创建相同的数组,但元素应该保持相同的含义False应为False,True在新数组中应为True。
答案 0 :(得分:4)
您可以使用str.title
和ast.literal_eval
将字符串转换为布尔文字:
import ast
import numpy as np
li = ['FALSE', 'FALSE', 'TRUE', 'FALSE', 'FALSE', 'FALSE']
arr = np.array([ast.literal_eval(x.title()) for x in li])
# array([False, False, True, False, False, False], dtype=bool)
如果您的列表中只有这两个,那么您可以使用简单的列表理解:
arr = np.array([x=='TRUE' for x in li])
# array([False, False, True, False, False, False], dtype=bool)
请记住,非空字符串是 truthy ,因此将它们强制转换为bool会产生一个包含所有元素True
的数组。
答案 1 :(得分:3)
bool('True')
和bool('False')
始终返回True,因为字符串'True'
和'False'
不为空
您可以创建功能以将string
转换为bool
def string_to_bool(string):
if string == 'True':
return True
elif string == 'False':
return False
>>> string_to_bool('True')
True