A = [none, none, none, none]
还有一个非常简单的函数,用于控制2个值(无任何一个)是否不同:
def notEqual(a, b):
if a is None and b is None:
return True
if a != b:
return True
return False
我想创建一个名为bigList的列表,该列表针对A的每对元素显示是否相等。所以我想这样做:
for i in range(4):
for j in range(4):
if i != j:
c = ((i, j), (notEqual(A[i], A[j])))
bigList.append((c))
因此,一开始,bigList的所有元素都是((i,j),(True)) 再过一会我遇到这种情况:
A[0]=10 A[1]=10
因此与(0,1)和(1,0)相关的条件必须更改为False。 有一种简单的方法可以执行这样的操作吗? (当某些变量更改其值时,请更改某些条件)
答案 0 :(得分:0)
没有,没有办法。在大多数语言中,表达式是用变量的当前值求值的。您无法创建像not_equal(current_value_of_A, current_value_of_B)
那样的表达式,该表达式在A和/或B的值更改时会自动更改。因此,您必须以某种方式重新运行代码。
做类似事情的常用方法是observer pattern。也就是说,将您的表达式包装在一个类中,并在某些值更改时通知该类。
此外,使用字典而不是列表,其形式为{(i,j): notEqual(A[i], A[j])
,因此您可以仅更新单个(i,j)对,而无需重新运行整个代码。
答案 1 :(得分:0)
您可以使用python的 @propery 。它的工作方式类似于类似C#和JAVA的其他语言的getter。
根据您的情况,您可以使用吸气剂制作与((i, j), (notEqual(A[i], A[j])))
类似的对象。
请参阅下面的示例实现
class bigListElement(object):
A = [] # this is static
def __init__(self, index_tuple, areEqual):
self.index_tuple = index_tuple
self._areEqual = areEqual
@staticmethod
def notEqual(a, b):
if a is None and b is None:
return True
if a != b:
return True
return False
@property
def areEqual(self):
return bigListElement.notEqual(bigListElement.A[self.index_tuple[0]], bigListElement.A[self.index_tuple[1]])
print("Hello World")
bigListElement.A = [10, 2, 10, 3, 4]
a = bigListElement((0, 1), False)
print(a.areEqual) # True
bigListElement.A[1] = 10
print(a.areEqual) # False