Python 如何跟踪列表中已更改的元素

Python 如何跟踪列表中已更改的元素,python,Python,对于这个程序,我使用了一个包含4个元素的列表。当我改变一个元素时,我可能想把它放在一个变量中,以知道哪个元素被改变了。例如: 原始列表:['B','B','B','B'] 新列表:['*','B','B','B'] 因此,如何让我的程序知道元素0已更改?尝试以下方法: a = ['B', 'B', 'B', 'B'] new_a = ['*', 'B', 'c', 'B'] print([(a[i], i) for i in range(len(a)) if a[i] != new_a[i]])

对于这个程序,我使用了一个包含4个元素的列表。当我改变一个元素时,我可能想把它放在一个变量中,以知道哪个元素被改变了。例如:

原始列表:['B','B','B','B'] 新列表:['*','B','B','B']

因此,如何让我的程序知道元素0已更改?

尝试以下方法:

a = ['B', 'B', 'B', 'B']
new_a = ['*', 'B', 'c', 'B']
print([(a[i], i) for i in range(len(a)) if a[i] != new_a[i]])
输出:

[('B', 0), ('B', 2)]

您可以创建一个子类
collections.UserList
,并重写将用于更改列表的方法。这将允许您在这些方法中插入行为。如果确保在
super()
上调用该方法,则正常的列表行为将保持不变。例如,由于我们不知道您所说的“我如何才能让我的程序知道”的确切含义,因此这只是在每个方法中添加了一个
print()

from collections import UserList

class NotificationList(UserList):
    def __setitem__(self, index, value):        
        super().__setitem__(index, value)

        # do what you want here
        print(f"setting new value, {value}, at index {index}")
        
    def __delitem__(self, index):
        super().__delitem__(index)

        # do what you want here
        print(f"deleting item at index {index}")

    def append(self, value):
        super().append(value)

        # do what you want here
        print(f"appending value {value}")

        
n = NotificationList([1, 2, 3])
print(n)
# [1, 2, 3]

del n[1]
# deleting item at index 1
print(n)
# [1, 3]

n.append(2)
#appending value 2
print(n)
# [1, 3, 2]

n[2] = 10
# setting new value, 10, at index 2
print(n)
# [1, 3, 10]

不要直接更改列表。使用更改列表的函数,然后在此函数中执行您需要执行的任何其他操作。或者,创建自己的list类,当它发生更改时,可以根据自己的喜好进行响应。