2017-01-09 8 views
2

ich eine Liste von 10 Einzelteile haben, und eine weitere Liste von 10 zufällig wiederholten Zahlen nicht, wie folgend:Wie eine Liste neu zu ordnen, basierend auf einer Liste von Indizes

l = [a,b,c,d,e,f,g,h,i,j] 
m = [1,4,5,9,2,6,3,7,8,10] 

Ich möchte l neu zu ordnen, so dass jeder Artikel in l nimmt seinen entsprechenden Index von m.

Zum Beispiel sollte b der vierte werden und e sollte der zweite werden.

Ich bin wirklich am Algorithmus fest und die Logik bugs mich, so dass ich keine Ahnung habe, wie man thi nähert.

Wie kann ich das tun?

+0

Warum möchten Sie die Liste "l" sortieren? Sie können die Indizes von 'm' immer direkt in jeder Berechnung verwenden:' l [m [i] - 1] ' –

Antwort

3

Wenn Sie nur um auf den anderen Listen Positionen basierend bewegt versuchen, Elemente zu bekommen, Sie Schleife über alle Elemente von m und

l2 = [l[i - 1] for i in m] 

das Element der l mit Liste Verständnis greifen Aber wenn Sie tun die Reihenfolge auf der anderen Liste basiert wollen, Sie gehen sie zu müssen zusammen zip, sortiert auf dem Index, dann

[y for x,y in sorted(zip(m,l))] 
3

Beachten Sie die Elemente extrahieren: ich davon aus, dass ich m ist immer zusammenhängend (d.h. Es gibt keine "Lücken" und beginnt bei 1.

Wenn ja, können Sie mit einem Listenverständnis, zip() und sorted() ganz leicht bekommen, was Sie wollen.

Nehmen wir es Schritt für Schritt:

>>> l = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'] 
>>> m = [1, 4, 5, 9, 2, 6, 3, 7, 8, 10] 

zip() Paare jedes Element m mit einem Element der l:

>>> zip(m, l) 
[(1, 'a'), (4, 'b'), (5, 'c'), (9, 'd'), (2, 'e'), (6, 'f'), (3, 'g'), (7, 'h'), (8, 'i'), (10, 'j')] 

sorted() gibt eine sortierte Kopie der Liste von Paaren:

>>> sorted(zip(m, l)) 
[(1, 'a'), (2, 'e'), (3, 'g'), (4, 'b'), (5, 'c'), (6, 'f'), (7, 'h'), (8, 'i'), (9, 'd'), (10, 'j')] 

Fin Mit anderen Worten, ein Listenverständnis nimmt nur das zweite Element von jedem Paar:

>>> [x for i, x in sorted(zip(m, l))] 
['a', 'e', 'g', 'b', 'c', 'f', 'h', 'i', 'd', 'j'] 
Verwandte Themen