4 回答

TA贡献1757条经验 获得超7个赞
一个简单的方法:
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

TA贡献2036条经验 获得超8个赞
您可以计算列表中每个元素的出现次数,然后找到仅存在一个元素的位置的索引,但我觉得这可能不如您的解决方案高效。如果所有 3 个值都不同,它也不起作用。
my_tuple[[my_tuple.count(x) for x in my_tuple].index(1)]

TA贡献1828条经验 获得超3个赞
你可以试试这个:
index = [my_tuple.index(i) for i in my_tuple if my_tuple.count(i) == 1][0]
我不确定它在性能方面是否很棒。

TA贡献1836条经验 获得超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)查找索引。
添加回答
举报