Как проверить списки на изменения - PullRequest
0 голосов
/ 07 апреля 2019

Я экспериментировал с Google Calendar API для python и хочу каждые пять секунд проверять наличие новых событий в календаре. Я знаю, чтобы установить его как старый список, а затем сравнить его снова, когда он обновляется следующим образом:

- main() - это функция, которая извлекает данные из календаря.
- Allevents - список событий из календаря. К нему добавлены события в пределах main()
-Другие имена довольно интуитивно понятны.

while 1 == 1:
     time.sleep(5)
     main()
     if first == 0:
         m = set(allevents) - set(oldevents)
         print(oldevents)
         if not m:
             print('nothing changed')
         else:
             print(m)
             print("--------------------------------------------------------")
     else:
         oldevents = allevents
         first = False
     oldevents = allevents
     allevents.clear()

Когда я запускаю это, первый раз, когда он получает данные, идет отлично: выводит allevents (как написано в main()) и больше ничего. Второй раз, когда я еще не внес никаких изменений, он выводит allevents и oldevents (которые имеют одинаковые значения) вместе с сообщением nothing changed.

В третий раз цикл while выполняется, когда я добавляю событие в календарь. Теоретически я хочу вывести событие, которое я изменил из-за

m = set(allevents) - set(oldevents)
print(oldevents)
     if not m:
         print('nothing changed')
     else:
         print(m)
         print("--------------------------------------------------------")

Однако следует if not m: и выводит allevents и oldevents с теми же значениями и новым событием, которое я добавил и a nothing changed сообщение.

Примечание: когда я удаляю это событие в следующем цикле, оба списка также удаляют это событие.

Четыре цикла (с некоторыми изменениями для презентаций):

Getting the upcoming 10 events
['5kt8vb1m5tad2h6higtd8seqp9']

Getting the upcoming 10 events
['5kt8vb1m5tad2h6higtd8seqp9']
['5kt8vb1m5tad2h6higtd8seqp9']
nothing changed

Getting the upcoming 10 events
['7p4hs2ribddnl5h13erv5c1rir', '5kt8vb1m5tad2h6higtd8seqp9']
['7p4hs2ribddnl5h13erv5c1rir', '5kt8vb1m5tad2h6higtd8seqp9']
nothing changed

Getting the upcoming 10 events
['5kt8vb1m5tad2h6higtd8seqp9']
['5kt8vb1m5tad2h6higtd8seqp9']
nothing changed

Если вы считаете, что больше кода необходимо, скажите мне, и я опубликую все это.

1 Ответ

0 голосов
/ 07 апреля 2019

в вашем коде "first = False" устанавливает сначала в ноль. Таким образом, он входит в цикл if в следующей итерации. Удалите «first = False» и попробуйте

...