我正在编写一个使用.csv文件的程序,其中一个列只包含True或False。我将文本格式化为boolean所以我需要一种方法来只提取包含True的列表(这些列表也包含整数和字符串,所以我写了一个函数findinlist(thing)。我是一个初学者,所以我很努力让这个到为布尔值工作。当我运行它时,它会返回一个空列表。是否有另一种方法可以执行此操作,还是必须对我的函数进行修改?当我尝试使用它来提取字符串时,它可以工作。
这是功能:
def findinlist(thing):
global rowsfound
rowsfound = []
for sample in enddata:
for element in sample:
try:
if thing in element:
rowsfound.append(sample)
break
except TypeError:
pass
return rowsfound
(我知道使用全局不是很好)
以下是我如何使用它
def option3():
exceptionlist=findinlist(True)
print(exceptionlist)
break
print("-"*80)
menureturn()
我尝试使用语音标记但显然会尝试查找字符串而不是布尔值。
编辑:我的csv文件如下所示:0 00:00 14 0 FALSE 0 这些是格式化之前的列,但我将第1,2和4列更改为字符串,因此它们变为'sunday','00:00',14,'none',False,0(False变为布尔值)
编辑:我也尝试过使用未格式化的数据(所有字符串)并且确实找到了“True”,但是我想处理已经格式化为布尔值的数据。答案 0 :(得分:0)
试试这个:
def findinlist(thing):
if type(thing) is bool:
thing = str(thing)
global rowsfound
rowsfound = []
for sample in enddata:
for element in sample:
try:
if thing in element:
rowsfound.append(sample)
break
except TypeError:
pass
return rowsfound
答案 1 :(得分:0)
下面的代码似乎有效,但我不明白为什么你rowsfound
list
,因为一旦找到第一个匹配,其他任何内容都不会append
由于break
循环中的for
而导致。
def findinlist(thing):
global rowsfound
rowsfound = []
for sample in enddata:
if thing in sample:
rowsfound.append(sample)
break
return rowsfound
enddata = [['sunday', '00:00', 14, 'none', False, 0],
['tuesday', '04:20', 42, 'one', True, 13],]
print(findinlist(True)) # -> [['tuesday', '04:20', 42, 'one', True, 13]]