【问题标题】:How to find a unique element in the three-element array?如何在三元素数组中找到唯一元素?
【发布时间】:2020-02-02 14:02:12
【问题描述】:

我有一个 3 元素元组,其中一个元素与其他两个不同。例如,它可能类似于:(0.456, 0.768, 0.456)

找到这个不同元素的索引的最简单方法是什么?我能想到的一种方法是考虑索引(0, 1)(1, 2),其中之一将是不同的。如果它是(0, 1)然后将它们的元素与2否则,比较(1, 2) index 0找到不同的元素。

感觉就像我错过了一种 pythonic 方式来做到这一点。

【问题讨论】:

  • 你可以这样做 [my_tuple.count(x) for x in my_tuple].index(1) 但我不确定我是否更喜欢你的方法

标签: python arrays python-3.x list tuples


【解决方案1】:

一个简单的方法:

def func(arr):
    x, y, z = arr
    return 2 * (x == y) + (x == z)

测试:

func(['B', 'A', 'A'])
# 0

func(['A', 'B', 'A'])
# 1

func(['A', 'A', 'B'])
# 2

【讨论】:

    【解决方案2】:

    您可以计算列表中每个元素的出现次数,然后找到仅存在一个元素的位置的索引,但我觉得这可能不如您的解决方案高效。如果所有 3 个值都不同,它也不会起作用。

    my_tuple[[my_tuple.count(x) for x in my_tuple].index(1)]
    

    【讨论】:

    • 如果所有 3 个值都不同。 - 这个问题没有答案:)
    • @splash58 - 那时所有 3 都不同,所以我不确定操作想要返回什么 :)
    • 是的,考虑到它只有 3 个项目,我将使用这一个衬垫 :) 性能不是什么大问题 :)
    【解决方案3】:

    你可以试试这个:

    index = [my_tuple.index(i) for i in my_tuple if my_tuple.count(i) == 1][0]
    

    我不确定它的性能是否很棒。

    【讨论】:

      【解决方案4】:

      在 python 3 中可能看起来像一个巨大的矫枉过正,但忍不住发布:

      import collections
      a = (0.768, 0.456, 0.456)
      print("Dissimilar object index: ", a.index(list(collections.Counter(a).keys())[list(collections.Counter(a).values()).index(1)]))
      

      解释:

      collections.Counter(a): 将返回一个频率字典,例如{0.768:1, 0.456:2} 等。然后我们只需创建一个列表以利用index(1) 来找出奇数的值。然后我们使用a.index(odd_one_out_val) 来查找索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-03-13
        • 2011-02-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-04
        相关资源
        最近更新 更多