【问题标题】:Print difference between two tuples打印两个元组之间的差异
【发布时间】:2015-04-07 12:08:15
【问题描述】:

如何只打印两个元组之间的差异?

 >>>a=(1,2,3,4)
 >>>b=(2,3,5,6)

如果元组如上,则预期输出为(1,4,5,6)。比较函数只能比较,找不到差异。

元组由MySQLdb python 库生成。正在执行的查询会产生大量数据。

In [13]: c.execute(query)
Out[13]: 86844L
In [14]: qop1 = c.fetchall()
In [19]: len(qop1)
Out[19]: 86844

因此,如果我将每个元组与自定义代码进行比较,将花费大量时间。我可以像内置 python 库那样以一种有效的方式实现这一点吗?

【问题讨论】:

  • 如何定义两个元组之间的差异(1, 2, 3)(3, 2, 1) 一样吗?您想要编辑距离或类似的吗?
  • 你的意思是预期的输出是(1,1,2,2)吗?您编写的输出既不是组件差异,也不是将每个元组视为数字的差异。
  • 我认为 OP 希望显示两个元组之间不共有的值。
  • 最有可能被否决的原因有两个(鉴于这些,被否决是正常的): 1. 因为问题不清楚(看看人们必须做的猜测数量) ) 和 2,您没有表现出任何研究成果。
  • 研究或编码工作。

标签: python tuples difference


【解决方案1】:

您希望Symmetric Difference -- 元素在任一集合中,但不在交集中。这可以通过以下方式完成:

set(a) ^ set(b)

或:

set(a).symmetric_difference(set(b))

【讨论】:

  • set(a).symmetric_difference(b) 其实就够了。顺便说一下,很好地使用了 xor 运算符。
  • 难道symmetric_difference 不需要同时对ab 进行排序吗?如果您不将 b 设置为一组,则需要通过 sorted(b) 运行它(除非您知道 b 始终已排序并且没有重复项)。
  • 集合是哈希表,所以它们没有排序。值只是根据其对应的哈希值以特定顺序结束,但不能保证此顺序与sorted(s) 相同。在任何情况下,订单和重复都不是问题,因为 documentation 声明 the non-operator versions of union(), intersection(), difference(), and symmetric_difference() will accept any iterable as an argument(自 2.3.1 版起)
【解决方案2】:

从你的例子可以推断出你在问集的对称差异,而在python中你可以简单地做

a=(1,2,3,4)
b=(2,3,5,6)
print tuple(set(a) ^ set(b))

【讨论】:

    猜你喜欢
    • 2016-11-24
    • 1970-01-01
    • 2021-05-28
    • 2014-04-28
    • 1970-01-01
    • 2010-12-17
    • 2018-09-23
    • 2013-03-27
    • 1970-01-01
    相关资源
    最近更新 更多