Jeśli mam listę, [a,b,c,d,e]
jak mogę zmienić kolejność pozycji w dowolny sposób [d,c,a,b,e]
?
Edycja: nie chcę ich tasować. Chcę je ponownie zamówić we wstępnie zdefiniowany sposób. (na przykład wiem, że 3. element starej listy powinien stać się pierwszym elementem nowej listy)
Odpowiedzi:
Możesz to zrobić w ten sposób
źródło
mylist[:] = [mylist[i] for i in myorder]
źródło
źródło
Czy ostateczna kolejność jest określona przez listę indeksów?
edytuj: meh. AJ był szybszy ... Jak mogę zmienić kolejność listy w Pythonie?
źródło
źródło
Możesz udostępnić własną funkcję sortowania, aby
list.sort()
:źródło
Jeśli używasz numpy, jest na to zgrabny sposób:
Ten kod zwraca:
źródło
Jeśli nie zależy Ci tak bardzo na wydajności, możesz polegać na indeksowaniu tablic numpy, aby uczynić go eleganckim:
źródło
Z tego, co rozumiem z Twojego pytania, wynika, że chcesz zastosować permutację określoną w pliku
list
. Odbywa się to poprzez określenie innegolist
(nazwijmy top
), który przechowuje indeksy elementów oryginału,list
które powinny pojawić się w permutacjilist
. Następniep
tworzysz nowylist
, po prostu zastępując element w każdej pozycji tym, którego indeks znajduje się na tej pozycjip
.To drukuje
['d', 'c', 'a', 'b', 'e']
.To faktycznie tworzy nowy
list
, ale można go w trywialny sposób zmodyfikować, aby zastąpić oryginał „na miejscu”.źródło
Jeszcze jedną rzeczą, którą można wziąć pod uwagę, jest inna interpretacja, na którą wskazuje Darkless
Kod w Pythonie 2.7
Głównie:
Uporządkuj według indeksu
Spowoduje to wydrukowanie ['c', 'd', 'b', 'a', 'e']
źródło
źródło
Właśnie tego użyłem, kiedy natknąłem się na ten problem.
EX: dla małych liter
Po prostu przesuwa listę do określonego indeksu
źródło