Angular 2 - как использовать новый угловой маршрутизатор 2.0.0-rc.1

Лучший способ сделать это - сортировка списков и их сравнение. (Использование 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, который будет быстрее.

37
задан Eran Shabi 22 December 2016 в 08:13
поделиться