Как выполнить глубокие сравнения равенств двух списков кортежей?

Я хочу сравнить два списка кортежей:

larry = [(1,'a'), (2, 'b')] moe = [(2, 'b'), (1, 'a')] 

так что порядок элементов в списке может отличаться. Существуют ли библиотечные функции для этого?

 >> deep_equals(larry, moe) True 

2 Solutions collect form web for “Как выполнить глубокие сравнения равенств двух списков кортежей?”

Если все, о чем вы заботитесь, это порядок предметов в самом дальнем списке (это то, что предлагает мне все, кроме слова «глубокое», – это само по себе вызывает у меня сомнения в отношении того, что вы имели в виду), и вы знаете, что есть не будет дубликатов, вы можете использовать set .

 >>> larry = [(1,'a'), (2, 'b')] >>> moe = [(2, 'b'), (1, 'a')] >>> set(larry) == set(moe) True 

Если дело так же просто, как эти два кортежа, вы также можете использовать dict , который будет {1: 'a', 2: 'b'} . Это может быть или не быть более удобной структурой для вас. Сравнение dict(larry) == dict(moe) будет делать то, что вы хотите, так или иначе.

Если вы беспокоитесь о дубликатах, это займет немного больше работы, взяв копии списков и вытаскивая элементы один за другим, пока не потерпит неудачу, или пусто.

Если я понимаю вас, ваши кортежи представляют наборы, а ваши списки представляют собой наборы. Очевидное, что нужно сделать, это преобразовать их в множества:

 def setterific(l): return frozenset(frozenset(p) for p in l) setterific(larry) == setterific(moe) 

Это использует frozensets, потому что не может быть наборов множеств в python (потому что наборы изменяемы); см. Как создать набор наборов в Python? ,

Если у вас только один уровень наборов, пойдите с frozenset(larry) == frozenset(moe) .

  • Выполнить скрипт python внутри скрипта python
  • Pythonic способ подсчета количества завершающих нулей
  • Соберите каждую пару элементов из списка в кортежи в Python
  • Почему вызывающая функция в python содержит переменную, равную значению?
  • Разница между «глобальным» и «импортом __main__»
  • правильный способ добавления пользовательской (глубокой) логики копирования в класс python
  • Почему sympy переопределяет `__new__` вместо` __init__`?
  • Использование строки в качестве имени переменной
  • Python - лучший язык программирования в мире.