2015-06-06 6 views

ответ

5

Для множеств, означает a < ba является подмножеством b. Ни один из ваших двух наборов не является подмножеством другого, поэтому они считаются «одинаково большими», и поэтому вы всегда просто получили первый аргумент.

Демо множество сортировки:

>>> sorted([{5,6,7,8,9}, {1,2,3}, {1,2}, {1}, {1,2,3,4}]) 
[{8, 9, 5, 6, 7}, {1}, {1, 2}, {1, 2, 3}, {1, 2, 3, 4}] 

Здесь {5,6,7,8,9} ни подмножество, ни надстройка любого из других, поэтому она считается столь же большой и так как это в самом начале, и функция сортировки является стабильной, он остается на своем месте. Остальные четыре, однако, сортируются красиво, потому что {1} является подмножеством {1,2} и т. Д.

Однако, поскольку нет единого заказа среди множеств, их сортировка частично непредсказуема. Например, здесь {5,6,7,8,9} действительно перемещаются в другое положение:

>>> sorted([{1,2,3}, {1,2}, {5,6,7,8,9}, {1}, {1,2,3,4}]) 
[{1}, {1, 2}, {1, 2, 3}, {8, 9, 5, 6, 7}, {1, 2, 3, 4}] 

Если вы хотите отсортировать устанавливает другой способ, например, по размеру, а затем просто использовать соответствующий key:

>>> sorted([{1,2,3}, {1,2}, {5,6,7,8,9}, {1}, {1,2,3,4}], key=len) 
[{1}, {1, 2}, {1, 2, 3}, {1, 2, 3, 4}, {8, 9, 5, 6, 7}] 

>>> max([{1,2,3}, {1,2}, {5,6,7,8,9}, {1}, {1,2,3,4}], key=len) 
{8, 9, 5, 6, 7} 
+0

мы имеем объяснение, почему это так? Почему бы не отсортировать наборы по их длине? –

+0

@JeanDupont «<», а точнее «⊂», это просто стандартное «сравнение» наборов. Если вы хотите сказать, что набор имеет меньшее количество элементов, скажем «| A | <| B |». Или в Python, len (A)

Смежные вопросы