有没有另一种方法可以在列表列表中查找布尔值?



编辑:我已经解决了这个问题,没有立即格式化布尔值,将其保留为 function3() 的字符串,然后在显示结果之前对其进行格式化。谢谢你的想法,他们都非常有帮助!

我正在编写一个使用.csv文件的程序,其中一个列只包含真或假。我将文本格式化为布尔值,因此我需要一种方法来仅提取包含 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 列更改为字符串,使它们变为"星期日"、"00:00"、14、"无"、假、0(假变成布尔值)

编辑:我也尝试过使用未格式化的数据(所有字符串),它确实找到了"True",但是我想使用已经格式化为布尔值的数据。

试试这个:

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

下面的代码似乎有效,尽管我不明白为什么您rowsfoundlist,因为一旦找到第一个匹配项,由于for循环中的break,不会append任何其他内容。

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]]

最新更新