Лучший способ сделать это - сортировка списков и их сравнение. (Использование Counter
не будет работать с объектами, которые не являются хешируемыми.) Это просто для целых чисел:
sorted(a) == sorted(b)
Это становится немного сложнее с произвольными объектами. Если вам небезразличен идентификатор объекта, то есть, являются ли те же объекты в обоих списках, вы можете использовать функцию id()
в качестве ключа сортировки.
sorted(a, key=id) == sorted(b, key==id)
(In Python 2.x вам действительно не нужен параметр key=
, потому что вы можете сравнивать любой объект с любым объектом. Порядок произвольный, но стабильный, поэтому он отлично подходит для этой цели, неважно, какой порядок объектов в том числе, что упорядочение одинаково для обоих списков. В Python 3, однако, сравнение объектов разных типов запрещено во многих случаях - например, вы не можете сравнивать строки с целыми числами, поэтому, если у вас будет объекты разных типов, лучше всего использовать идентификатор объекта.)
Если вы хотите сравнить объекты в списке по значению , , с другой стороны, сначала вам нужно определить, что означает «значение» для объектов. Тогда вам понадобится какой-то способ предоставить это как ключ (и для Python 3, как согласованный тип). Один из возможных способов работы для множества произвольных объектов - сортировка по их repr()
. Конечно, это может тратить много лишнего времени и блоков памяти repr()
для больших списков и т. Д.
sorted(a, key=repr) == sorted(b, key==repr)
Если объекты все ваши собственные типы, вы можете определить __lt__()
на них, чтобы объект знал, как сравнивать себя с другими. Затем вы можете просто отсортировать их и не беспокоиться о параметре key=
. Конечно, вы также можете определить __hash__()
и использовать Counter
, который будет быстрее.