Удалить пары кортежей, если они одинаковые - PullRequest
0 голосов
/ 06 ноября 2018

У меня проблема с кортежами в python. У меня есть следующий список кортежей:

gamma2 = [[('p', 'u'), ('r', 'w')], [('p', 'w'), ('r', 'u')], [('r', 'u'), ('p', 'w')],[('r', 'w'), ('p', 'u')]]

Теперь части [('p', 'u'), ('r', 'w')] и [('r', 'w'), ('p', 'u')] одинаковы для меня, а также [('p', 'w'), ('r', 'u')] и [('r', 'u'), ('p', 'w')].

Итак, я хочу удалить одну из этих двойных записей в моем списке, но я не знаю как.

Я пробовал с хеш-таблицами и set, но проблема в том, что эта пара кортежей не совпадает с хеш-таблицей, и она будет добавлена ​​gamma2.add().

Так у вас есть идея?

1 Ответ

0 голосов
/ 06 ноября 2018

вы можете попробовать использовать набор кортежей и

gamma2 = [[('p', 'u'), ('r', 'w')], [('p', 'w'), ('r', 'u')], [('r', 'u'), ('p', 'w')],[('r', 'w'), ('p', 'u')]]
set([tuple(set(x)) for x in gamma2])

для некоторых случаев будет лучше использовать sorted вместо set (спасибо @rockikz)

set([tuple(sorted(x)) for x in gamma2])

и третье решение заключается в использовании frozenset

set([frozenset(x) for x in gamma2])

даст вам результат:

{(('p', 'w'), ('r', 'u')), (('r', 'w'), ('p', 'u'))}

set - список уникальных значений

  • набор внутри цикла - нужно привести элементы, чтобы они были равны
  • следующий набор кортежей используется только в качестве сахара для создания внешнего набора
  • и последний набор, который мы используем для получения уникальных значений

и если вам нужен тот же тип в результате, вы можете сделать это:

[list(y) for y in set([tuple(set(x)) for x in gamma2])]

даст вам

[[('r', 'w'), ('p', 'u')], [('p', 'w'), ('r', 'u')]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...