【问题标题】:Why the two zipped objects are not equal?为什么两个压缩对象不相等?
【发布时间】:2023-01-26 19:13:17
【问题描述】:

使用列表和元组创建两个 zip。

x1=[1,2,3]
y1=[4,5,6]
x2=(1,2,3)
y2=(4,5,6)
w1=zip(x1,y2)
w2=zip(x2,y2)

比较它们:

w1 == w2
False

list函数显示值,它们包含相同的值,为什么w1==w2是False?

list(w1)
[(1, 4), (2, 5), (3, 6)]
list(w2)
[(1, 4), (2, 5), (3, 6)]

【问题讨论】:

  • 将它们包装在 set() set(w1) == set(w2) 中
  • 这回答了你的问题了吗? Compare two lists of tuples
  • 因为您是在比较两个不同的对象,而不是它们的内容。
  • 请尝试使用 list(w1) == list(w2)zip 没有适当的相等性。

标签: python python-zip


【解决方案1】:

两个 zip 对象比较不相等,因为 zip 类没有定义任何比较逻辑,所以它使用默认的 object 逻辑,只关心对象标识。在这种情况下,一个对象只能比较等于本身;对象内容无关紧要。

也就是说:zip对象“包含”迭代中的值,这就是为什么它们 can't be reused。验证它们在迭代时会给出相同结果的唯一可靠方法是进行该迭代。

在内部,zip 对象只是对其他数据有一些迭代器。有人可能会想,为什么不比较迭代器,看看它们是否“指向”相同底层数据中的相同位置?但这也行不通:实现迭代器的方法有很多,而且迭代器通常不知道它迭代的是什么。许多迭代器不会“知道”它们在底层数据中的位置。许多迭代器不是在基础数据的某个位置,而是动态计算值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多