还有另一种方法可以在列表列表中找到布尔值吗?

时间:2017-09-02 20:39:12

标签: python

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

我正在编写一个使用.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”,但是我想处理已经格式化为布尔值的数据。

2 个答案:

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