изменение порядка кортежей в списке

#list #tuples

#Список #кортежи

Вопрос:

У меня следующий вопрос.

Два отдельных списка с кортежами внутри:

 list1 = [('hello', 'world'), ('life', 'sun'), ('hello', 'hello')]
list2 = [('world', 'hello'), ('life', 'sun'), ('goodbye', 'hello')]
 

Я хочу вернуть:

 [('hello', 'world'), ('life', 'sun')]
 

Также может быть ('world', 'hello') вместо ('hello', 'world')

Я пробовал intersection и set . Но это исключает ('hello', 'world'), ('world', 'hello') причину, по которой они не совпадают different order . Но я хочу вернуть комбинацию. т. Е. ('hello', 'world') Это то же ('world', 'hello') самое, что и для моей цели.

Спасибо за ваше время. С наилучшими пожеланиями.

Ответ №1:

Вы можете отсортировать каждый кортеж перед формированием наборов:

 set(tuple(sorted(t)) for t in list1) amp; set(tuple(sorted(t)) for t in list2)
 

вычисляется как

 {('hello', 'world'), ('life', 'sun')}
 

Дело в том, что, например tuple(sorted('world','hello')) = ('hello','world') (с элементами кортежа, расположенными в алфавитном порядке).