#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')
(с элементами кортежа, расположенными в алфавитном порядке).