2016-11-06 2 views
0
def last_name(str): 
    return str.split()[1] 

names = ["Isaac Newton", "Fred Newton", "Niels Bohr"] 
print("s:", sorted(names, key=last_name)) 
print("s:", sorted(names, key=last_name, reverse=True)) 

Выход:Python реверса = True реверсирования вопрос

s: ['Niels Bohr', 'Isaac Newton', 'Fred Newton'] 
s: ['Isaac Newton', 'Fred Newton', 'Niels Bohr'] 

Когда я использую reverse=True, она не должна быть такой: ['Fred Newton','Isaac Newton', 'Niels Bohr']?

+1

Зачем это должно быть? –

+0

Почему? Вы сортируете по last_name. Ньютон = Ньютон, порядок Фреда против Исаака не имеет значения. – Daniel

ответ

5

Алгоритм сортировки Python: стабильный. Если два значения имеют одинаковые результаты key(value), то их относительный порядок остается неизменным. Сторнирование применяется только к key(value) результатам, которые отличаются от.

Поскольку key('Isaac Newton') и key('Fred Newton') оба производит 'Newton', эти две строки оставлены в исходном относительном порядке. Флаг reverse=True влияет только на то, что 'Bohr' сортируется до или после 'Newton'.

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

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