如何仅在将某些内容添加到列表中时打印?

How to print only when something gets added into a list?

我知道你有一个 [1,2,3,4,5] 的列表等,我的想法是,如果其中一些得到 pop/deleted,那么它就不应该打印出来。比方说,我们删除数字 3。在那种情况下,我们的列表将是 [1,2,4,5] 并且脚本应该是通常的。但是每当一个值被添加到列表中时。然后打印出整个列表 so etc. add number 6 – > [1,2,4,5,6] - 打印出整个列表.

问题是我不想在有任何内容被删除时得到通知所以我从一开始的想法是检查列表的长度然后在它被更改时通知但后来我意识到我做错的是它会在添加时通知 and/nor 删除,这就是我现在在这里的原因。

我所做的是 new_name_listold_name_list 的比较,但这个将通知基本上发生的任何变化。

import names


def get_value(value):

     value = names.get_full_name()

     names_list = []
     for names in names.get_last_name():
        names_list.append(names)
        break

     identifier = ('{} {}').format(value, names_list)

     return identifier


if __name__ == '__main__':

    old_name_list = get_value()

    while True:
        new_name_list = get_value()
        if new_name_list not in old_name_list:
            print("Yay new name added")

        else:
            print('I will re try again in 5 sec')
            time.sleep(5)

我的问题是 - 我怎样才能让它只在 names_list 的值得到通知时打印 仅当添加但未删除某些内容时

等等

1. [1,2,3,4,5] - print from beginning
2. [1,2,4,5] - Deleted 3 - Do not print
3. [1,2,4,5,6] - Print list, something got added
4. [1,4,5,6] - Deleted 2 - Do not print
5. .........

算法可能如下:

  1. 订购新旧列表。
  2. 如果长度相等 -> 比较元素到元素。如果新列表包含与旧列表不同的元素,则意味着添加了新值。
  3. 如果新列表长度 > 旧列表长度,也意味着添加了新元素。

示例:

def detect_change(old_list, new_list):
    changed_flag = False
    old_list.sort()
    new_list.sort()
    if len(old_list) == len(new_list):
        for i in range(0, len(old_list)):
            if old_list[i] != new_list[i]:
                changed_flag = True
    elif len(old_list) < len(new_list):
        changed_flag = True
    return changed_flag

list1 = ["a", "b", "c", "d"]
list2 = ["a", "b", "c", "k"]

print(detect_change(list1, list2))