Python-仅在将某些内容添加到列表中时打印

时间:2018-11-20 21:57:44

标签: python list printing add pop

因此,我想到了您有[1,2,3,4,5]等列表的情况,我的想法是,如果弹出/删除了其中一些列表,则不应打印该列表。假设以此类推。我们删除了数字3。在这种情况下,我们的列表将为[1,2,4,5],脚本应该是常规的。但是只要将值添加到列表中。然后打印出整个列表,以此类推。添加数字6-> [1,2,4,5,6]-打印出整个列表。

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

我所做的是将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]-从头开始打印
  2. [1,2,4,5]-删除3-不打印
  3. [1,2,4,5,6]-打印列表,添加了一些内容
  4. [1,4,5,6]-删除2-不打印
  5. .........

我希望我确实解释了它的正确性,以及是否有任何误解。请让我知道,我将尝试尽快编辑,并且下次还要学会更好地编写(任何提示,我们都会感激:))

1 个答案:

答案 0 :(得分:1)

算法可能如下:

  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))