Как найти уникальный элемент в массиве из трех элементов? - PullRequest
3 голосов
/ 04 октября 2019

У меня есть кортеж из 3 элементов, в котором один из элементов отличается от двух других. Например, это может быть что-то вроде: (0.456, 0.768, 0.456).

Какой самый простой способ найти индекс этого разнородного элемента? Один из способов, который я могу придумать, это рассмотреть индексы (0, 1) и (1, 2), и один из них будет отличаться. Если это (0, 1), тогда сравните их элементы с элементом на 2, в противном случае сравните элементы (1, 2) с индексом 0, чтобы найти отличающийся элемент.

Чувствуется, что я пропускаю питонический путьсделать это.

Ответы [ 4 ]

4 голосов
/ 04 октября 2019

Простой подход:

func = lambda x: (x[0] == x[2]) + 2 * (x[0] == x[1])

func((0.456, 0.768, 0.456))
# 1
4 голосов
/ 04 октября 2019

Вы можете сосчитать вхождения каждого элемента в списке, а затем найти индекс места, где существует только один элемент, но я чувствую, что это может быть не так эффективно, как ваше решение. Также не будет работать, если все 3 значения различны.

my_tuple[[my_tuple.count(x) for x in my_tuple].index(1)]
2 голосов
/ 04 октября 2019

Вы можете попробовать это:

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

Я не уверен, что с точки зрения производительности это здорово.

1 голос
/ 04 октября 2019

Что может выглядеть как огромный перебор в питоне 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), чтобы найти индекс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...