首页 > 解决方案 > Python 列表应该不相等

问题描述

有人可以解释为什么两个列表不相等吗?我的意思是输出应该是真,但它的输出是假的。为什么?

    # CASE 1
    list1 = []
    for item in [self.home_btn, self.secret_dir_btn, self.info_btn]:
        list1.append(QPropertyAnimation(item, b"size"))

    # CASE 2
    self.home_btn_anim = QPropertyAnimation(self.home_btn, b"size")
    self.secret_dir_btn_anim = QPropertyAnimation(self.secret_dir_btn, b"size")
    self.info_btn_anim = QPropertyAnimation(self.info_btn, b"size")
    list2 = [self.home_btn_anim, self.secret_dir_btn_anim, self.info_btn_anim]

    # Output
    print(list1 == list2)
    # Further code

此外,如果我使用案例 1 创建列表,我的进一步代码将无法正常工作。但是使用案例 2 创建列表可以使代码正常工作。为什么?我该如何解决。

标签: pythonlistpyqt5

解决方案


正如他们已经向您指出的那样,考虑到您尝试做的是比较 QPropertyAnimation,序列之间的比较是逐个元素给出的。

另一方面,出于设计原因,QObjects 不可比较,因为它们处理许多内部状态,这意味着即使它们具有相同的属性,它们的行为方式也不同。QPropertyAnimation 是 QObject,因此它们也继承了该限制。

考虑到这一点,不建议实现该__eq__方法,因为它与预定义的设计相矛盾,相反,如果您想比较某些属性,则创建一个逐个比较属性的方法:

def compare_animations(animation1, animation2):
    return (
        animation1.target() is animation2.target()
        and animation1.propertyName() == animation2.propertyName()
    )
equals = all([compare_animations(anim1, anim2) for anim1, anim2 in zip(list1, list2)])
print(equals)

推荐阅读