Python 如何跟踪列表中已更改的元素
对于这个程序,我使用了一个包含4个元素的列表。当我改变一个元素时,我可能想把它放在一个变量中,以知道哪个元素被改变了。例如: 原始列表:['B','B','B','B'] 新列表:['*','B','B','B'] 因此,如何让我的程序知道元素0已更改?尝试以下方法: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]])
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类,当它发生更改时,可以根据自己的喜好进行响应。