如何从给定的元组列表中提取和比较数据?

时间:2018-12-08 04:49:05

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

代码:

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)此外,是否可以通过某种方式检查而不打印任何内容?

2 个答案:

答案 0 :(得分:1)

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

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

喜欢:

None

答案 1 :(得分:0)

我在代码上做了很少的更改。

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

只需将else语句添加到check中,就可以将其删除

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)