Beim Sortieren nach SQL
Select * from table Order By key1 DESC, key2 ASC
Sie können die aufsteigende / absteigende Reihenfolge jedes Schlüssels wie in angeben.
In C / C ++ usw. können Sie dasselbe tun, indem Sie die Vergleichsfunktion selbst definieren.
int compare(const MyStruct *a, const MyStruct *b)
{
if(a->k1 == b->k1){
return b->k2 - a->k2;
}else{
return a->k1 - b->k2;
}
}
Andererseits kann sort in Python nur die Schlüsselfunktion und die aufsteigende / absteigende Reihenfolge des Ganzen angeben. Was soll ich also tun, wenn ich ein Tupel mit mehreren Elementen auf diese Weise sortiere?
Es wurde im offiziellen Dokument geschrieben. https://docs.python.org/3/howto/sorting.html#sort-stability-and-complex-sorts
Sorts are guaranteed to be stable. That means that when multiple records have the same key, their original order is preserved.
This wonderful property lets you build complex sorts in a series of sorting steps. For example, to sort the student data by descending grade and then ascending age, do the age sort first and then sort again using grade
def multisort(xs, specs):
for key, reverse in reversed(specs):
xs.sort(key=lambda x: x[key], reverse=reverse)
return xs
Da die Python-Sortierung eine stabile Sortierung ist, können Sie wiederholt sortieren, indem Sie die aufsteigende / absteigende Reihenfolge in der Reihenfolge des Schlüssels mit der niedrigsten Priorität angeben. Aha!!
Recommended Posts