【问题标题】:Compare tuples of different size and rearrange/Replace tuple elements in python比较不同大小的元组并重新排列/替换python中的元组元素
【发布时间】:2017-02-27 14:25:56
【问题描述】:

您好,我是 python 新手,正在寻找比较两个不同大小的元组的方法,例如元组 a=(3,4)b=(1,3,4) 比较 a 和 b 并根据元组 a 重新排列/替换元组 b(即)b=(3,4,1),它应该适用于所有不同长度的元组。

这是示例输入列表:

l=[((1, 2), (1, 2, 4)), ((1, 2, 3), (2, 3)), ((1, 3, 4), (3, 4)), ((2, 3, 4), (2, 4))]

这是我的代码只是迭代元组列表:

for i, (a, b) in enumerate(l):
print a, b
print len(a), len(b)

我想要这样的输出,当元组 a 长度 x=2 与元组 b 长度 y=3 相比时,应该根据元组 a 中元素的位置以及元组 @ 的所有元素重新排列/替换元组 b 987654332@ 在里面。换句话说,将较短长度的元组与较大长度的元组进行比较,并重新排列/替换较大长度的元组 w.r.t 较短长度的元组,其中包含较大元组的所有元素。

我希望输出为:

[((1, 2), (1, 2, 4)), (( 2, 3, 1), (2, 3)), (( 3, 4, 1), (3, 4)), ((2, 4, 3), (2, 4))]

我在 python 中看到了排序的概念,它通过关键参数对元组进行排序,但我找不到任何帮助来比较其位置元素上的元组元素并重新排列或替换整个元组。

我想提出解决问题的建议。

【问题讨论】:

  • 如何重新排列?是否保证len(a) < len(b)
  • 元组是不可变的。你不能在里面移动一个元组的元素,你只能用一个新的元组替换整个东西。你为什么不想出一套规则来接受你拥有的两个元组,并创建一个新的元组来替换其中一个
  • 嘿 PatrickHaugh 我想知道我们如何实现它(即)比较和替换目标元组
  • 嘿@WillemVanOnsem 不保证元组长度,我已经比较了元素的长度并根据最短的元组重新排列/替换最长的元组
  • @ShafaatHussain 你能保证最短元组的所有元素都在最长的元组中吗?

标签: python python-2.7


【解决方案1】:

我实际上想出了解决上述问题的方法。感谢所有的 cmets 和反馈:)

输入:

l=[((1, 2), (1, 2, 4)), ((1, 2, 3), (2, 3)), ((1, 3, 4), (3, 4)), ((2, 3, 4), (2, 4))]

解决方案代码:

for i, (a, b) in enumerate(l):
# print a, b
# print len(a), len(b)
x= tuple(set(a).symmetric_difference(set(b)))
if(len(a)>len(b)):
    new_a=b+x
    l[i] = (new_a,b)
else:
    new_b=a+x
    l[i] = (a, new_b)

输出:

 [((1, 2), (1, 2, 4)), ((2, 3, 1), (2, 3)), ((3, 4, 1), (3, 4)), ((2, 4, 3), (2, 4))]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多