python - 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 创建列表可以使代码正常工作。为什么?我该如何解决。
解决方案
正如他们已经向您指出的那样,考虑到您尝试做的是比较 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)
推荐阅读
- assembly - 为什么某些二进制文件中没有显示“动态链接的函数名称”?
- linq - Linq 结果类型?
- javascript - javascript 上的数组减少返回具有数组可链接性的错误值
- python - 在 Visual Studio 2017 中运行 Python,输出显示不正确?
- javascript - 如何使用jquery获取选定行的列
- aem - Javascript 中的 JCR_SQL2 示例?
- sql-server - 在 SQL Server 中将列类型从 TinyInt 转换为 Int
- function - gmake 函数/ifneq/else/endif
- typescript - 在 TypeScript 中扩展 3rd 方接口
- android - java.lang.IllegalArgumentException:未能找到包含 /data/data/ 的已配置根目录