При добавлении двух почти одинаковых кортежей в набор, они должны рассматриваться как одинаковые - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть список объектов кортежей с одинаковым количеством элементов. Теперь я хотел бы поместить все уникальные объекты кортежей в другой список. Это относительно легко сделать. Однако элементы в моих объектах кортежей имеют тип float. Из-за ошибок округления некоторые кортежи, которые в противном случае были бы идентичны, например (1.0000000, 5.0000000, 7.0000001) и (1.0000001, 5.0000000, 7.0000000), будут считаться уникальными при добавлении их в набор. Здесь я добавляю значения вручную, в действительности они будут назначены после выполнения определенных вычислений. Так есть ли способ для двух почти одинаковых кортежей считаться одинаковыми при добавлении их в набор?

 myTuple = (1.0000000, 5.0000000, 7.0000001)
 myTuple2 = (1.0000001, 5.0000000, 7.0000000)
 myList.append(myTuple)
 myList.append(myTuple2)
 #add more tuples

 mySet = set()
 newList = []
 for x in myList:
    if x not in mySet:
        mySet.append(x)
        newList.append(x)

1 Ответ

2 голосов
/ 06 февраля 2020

В конце дня вам не нужны ни список, ни набор для хранения ответов, вы можете просто поймать их всех в наборе. Вы можете использовать понимание набора, чтобы сделать набор:

# three tuples, 2 equivalent when rounded to 6 places
t1 = (1.12345678, 2.0, 3.0)
t2 = (1.12345671, 2.0, 3.0)
t3 = (5.76, 9.842, 3.001)

inputs = [t1, t2, t3]

decimal_dust = 6

outputs = {( round(x, decimal_dust), round(y, decimal_dust), round(z, decimal_dust) )
    for (x, y, z) in inputs}

print(outputs)

Выход:

{(5.76, 9.842, 3.001), (1.123457, 2.0, 3.0)}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...