【问题标题】:How to extract and compare data from a given list of tuples?如何从给定的元组列表中提取和比较数据?
【发布时间】:2018-12-08 04:49:04
【问题描述】:

代码:

import datetime


data = [('09', '55', None, 'AC is on', None), ('10', '00',None, 'AC is on', None),('10', '13','fan is on', 'AC is on', 'light is on')]


def calc(data):

    print(data)               #prints the whole table
    while True:
        h=datetime.datetime.today().strftime("%H")              
        mi=datetime.datetime.today().strftime("%M")
        # z=[(i[2],i[3],i[4]) for i in data if i[0] == h and i[1]==mi]
        for i in data: 
            if i[0] == h and i[1]==mi:
                print (i[2],i[3],i[4])
                # sleep(60)
                break

if __name__ == '__main__':
    calc(data)

“数据”中的前 2 个元素是用户输入的小时和分钟。该代码应采用用户输入的值,即此处的数据。并应检查当前时间并应打印 i[2],i[3],i[4],如代码所示。

1)我只想将这些值打印一次。但是,它会持续检查并打印整整 1 分钟的值。 break 语句不起作用。

2)另外,是否有可能以某种方式检查而不打印无?

【问题讨论】:

  • 如果当前时间是上午 10:30 并且用户输入时间为 - data = [('10','31','fan is on','AC is on',none )]。然后,我们需要检查直到用户时间 == 当前时间并打印 'fan is on','AC is on',none。
  • 效果很好。谢谢。顺便说一句,我们可以不打印none吗?

标签: python python-3.x list tuples python-datetime


【解决方案1】:

如果我理解正确,您希望您的程序一直运行,直到找到当前时间与data:(data[i][0], data[i][1]) 中的元组之一 (i) 中指定的时间匹配,然后打印元组的其余部分:i[2:5]

  1. break 位于 for 循环范围内,而不是您的 while 循环范围内。你退出 for 循环,是的,不是你的无限 while True 循环。
  2. 我宁愿使用while match_not_found:,然后设置match_not_found = True,并在break 语句之前添加一行match_not_found = False
  3. 如果要使用元组的所有剩余项,则可以使用列表切片。
  4. 我添加了一个额外的if 以排除打印项目的None

像这样:

import datetime


data = [('09', '55', None, 'AC is on', None), ('10', '00',None, 'AC is on', None),('10', '13','fan is on', 'AC is on', 'light is on')]


def calc(data):

    print(data)               #prints the whole table
    match_not_found = True

    while match_not_found:
        h=datetime.datetime.today().strftime("%H")              
        mi=datetime.datetime.today().strftime("%M")
        # z=[(i[2],i[3],i[4]) for i in data if i[0] == h and i[1]==mi]
        for i in data: 
            if i[0] == h and i[1]==mi:
                print ([j for j in i[2:5] if j != None])
                match_not_found = False
                break

if __name__ == '__main__':
    calc(data)

【讨论】:

    【解决方案2】:

    我对代码做了一些更改。

    我不知道您为什么使用 While= True 。因此,它不会脱离循环。所以我把它删除了

    刚刚在for check中添加了else语句,可以去掉

    import datetime
    
    
    data = [('09', '55', None, 'AC is on', None), ('10', '00',None, 'AC is on', None),('10', '13','fan is on', 'AC is on', 'light is on')]
    
    
        def calc(data):
    
            print(data)               #prints the whole table
            # while True:
            h=datetime.datetime.today().strftime("%H")
            print(h)              
            mi=datetime.datetime.today().strftime("%M")
            print(mi)
            # z=[(i[2],i[3],i[4]) for i in data if i[0] == h and i[1]==mi]
            for i in data: 
                if i[0] == h and i[1]==mi:
                    print (i[2],i[3],i[4])
                else:
                    print ("It does NOT match")
                    # sleep(60)
                break
    
        if __name__ == '__main__':
             calc(data)
    

    已编辑(现在可以使用):

    import datetime
    
    
    data = [('09', '55', None, 'AC is on', None), ('10', '00',None, 'AC is on', None),('10', '52','fan is on', 'AC is on', None)]
    
    
    def calc(data):
    
        print(data)               #prints the whole table
        while True:
            h=datetime.datetime.today().strftime("%H")              
            mi=datetime.datetime.today().strftime("%M")
            # z=[(i[2],i[3],i[4]) for i in data if i[0] == h and i[1]==mi]
            for i in data: 
                if i[0] == h and i[1]==mi:
                    print (i[2],i[3],i[4])
                    # sleep(60)
                    exit()
    
    if __name__ == '__main__':
        calc(data)
    

    【讨论】:

    • 这是原因,我添加了 while --- 如果当前时间是上午 10:30 并且用户输入时间为 - data = [('10','31', '风扇开启','AC开启',无)]。然后,我们需要检查直到用户时间 == 当前时间并打印 'fan is on','AC is on',none。
    • @Captainaalooreportin'in 所以你的意思是,直到条件变为真我们需要检查? .如果是这样的话,把while循环放回去,在if循环中在print语句后添加exit()
    • 是的。工作!谢谢。你能告诉我为什么break语句不起作用吗?为什么它会陷入无限循环?
    • @Captainaalooreportin'in Break 只是为了摆脱循环。简单的一句话就退出执行。将答案标记为正确
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多