Zaczynam od nauki Pythona 3. Zastanawiam się, jak wykonać sortowanie niestandardowe. Na przykład, mogę chcieć posortować listę zwierząt w następujący sposób: sortuj według pierwszego znaku rosnąco, następnie według długości malejąco, następnie alfanumerycznie rosnąco.Niestandardowe sortowanie w Pythonie 3
Lista złożona z "mrówki", "antylopy", "zebry", "mrówkojada" po prawidłowym posortowaniu stanie się "mrówkojadem", "antylopą", "mrówką", "zebrą".
Przeczytałem trochę na dokumentach, ale nie całkiem dostałem argument "klucz" do metody sortowania. Dowolne przykłady? PS: to nie jest pytanie o przydzielenie uczelni. Po prostu chcę trochę pogadać z pytonem.
Dowiedziałem Java dawno, dawno temu, a może wdrożyły coś zwyczaj sortowania jak następuje:
import java.util.*;
public class sortDemo implements Comparator<String> {
public static void main(String[] args) {
ArrayList<String> animals = new ArrayList<String>();
animals.add("ant");
animals.add("antelope");
animals.add("zebra");
animals.add("anteater");
for (String a:animals){
System.out.println(a);
}
System.out.println();
// want output to be anteater, antelope, ant, zebra following the sort
Collections.sort(animals, new sortDemo());
for (String a:animals){
System.out.println(a);
}
}
public int compare(String s1, String s2) {
if (s1.charAt(0) > s2.charAt(0)){
return 1;
} else if (s1.charAt(0) == s2.charAt(0)){
if(s1.length() < s2.length()) {
return 1;
} else if (s1.length() == s2.length()) {
return s1.compareTo(s2);
} else {
return -1;
}
} else {
return -1;
}
}
}
[docs] (https://docs.python.org/3/howto/sorting.html) są dość proste. Wygląda na to, że twoje porównanie jest złożone, co oznacza, że 'cmp_to_key' może być tym, czego szukasz (przeszukaj dokumenty). – alfasin