2016-12-18 3 views
-1

Ich habe diese Liste:Python: Sortierliste außer erste Zeile

[['Nom', 'Francais', 'Anglais', 'Maths'], ['Catherine', '9', '17', '9'], ['Karim', '12', '15', '11'], ['Rachel', '15', '15', '14'], ['Roger', '12', '14', '12'], ['Gabriel', '7', '13', '8'], ['Francois', '14', '8', '15'], ['Henri', '10', '12', '13'], ['Stephane', '18', '12', '8'], ['Karine', '9', '10', '10'], ['Marie', '10', '10', '10'], ['Claire', '15', '9', '12'], ['Marine', '12', '9', '12']] 

ich es mit den Namen sortieren möchten (oder, in anderen Worten, nach alphabetischer Reihenfolge der [0] Element jeder Liste innerhalb die Liste), aber ich will nicht wollen nicht die erste Liste (['Nom', 'Francais', 'Anglais', 'Maths']) mit den anderen sortiert werden, wie kann man das tun?

Vielen Dank!

+5

Haben Sie etwas versuchen? und was meinst du mit der ersten Zeile? das erste Element in der Liste? – ettanany

+0

Ich meine, ich will, dass [Nom, Francais, Anglais, Maths] zuerst bleiben und dann die anderen Elemente sortiert werden. (Entschuldigung für mein schlechtes Englisch) –

+0

Bessere Frage: Warum speichern Sie Header-Informationen in der Liste selbst? – chepner

Antwort

0

können Sie Bereichszuweisung verwenden:

>>> from pprint import pprint # just to have a nice display 
>>> data = [['Nom', 'Francais', 'Anglais', 'Maths'], ['Catherine', '9', '17', '9'], ['Karim', '12', '15', '11'], ['Rachel', '15', '15', '14'], ['Roger', '12', '14', '12'], ['Gabriel', '7', '13', '8'], ['Francois', '14', '8', '15'], ['Henri', '10', '12', '13'], ['Stephane', '18', '12', '8'], ['Karine', '9', '10', '10'], ['Marie', '10', '10', '10'], ['Claire', '15', '9', '12'], ['Marine', '12', '9', '12']] 
>>> pprint(data) 
[['Nom', 'Francais', 'Anglais', 'Maths'], 
['Catherine', '9', '17', '9'], 
['Karim', '12', '15', '11'], 
['Rachel', '15', '15', '14'], 
['Roger', '12', '14', '12'], 
['Gabriel', '7', '13', '8'], 
['Francois', '14', '8', '15'], 
['Henri', '10', '12', '13'], 
['Stephane', '18', '12', '8'], 
['Karine', '9', '10', '10'], 
['Marie', '10', '10', '10'], 
['Claire', '15', '9', '12'], 
['Marine', '12', '9', '12']] 
>>> data[1:] = sorted(data[1:]) 
>>> pprint(data) 
[['Nom', 'Francais', 'Anglais', 'Maths'], 
['Catherine', '9', '17', '9'], 
['Claire', '15', '9', '12'], 
['Francois', '14', '8', '15'], 
['Gabriel', '7', '13', '8'], 
['Henri', '10', '12', '13'], 
['Karim', '12', '15', '11'], 
['Karine', '9', '10', '10'], 
['Marie', '10', '10', '10'], 
['Marine', '12', '9', '12'], 
['Rachel', '15', '15', '14'], 
['Roger', '12', '14', '12'], 
['Stephane', '18', '12', '8']] 
0

Ich persönlich so etwas tun würde. Aber es nimmt an, dass du mit Pandas halbwegs zufrieden bist. Dies gibt Ihnen viel mehr Flexibilität, um mehr mit den Daten zu tun.

import pandas as pd 

nl = [['Nom', 'Francais', 'Anglais', 'Maths'], ['Catherine', '9', '17', '9'], ['Karim', '12', '15', '11'], ['Rachel', '15', '15', '14'], ['Roger', '12', '14', '12'], ['Gabriel', '7', '13', '8'], ['Francois', '14', '8', '15'], ['Henri', '10', '12', '13'], ['Stephane', '18', '12', '8'], ['Karine', '9', '10', '10'], ['Marie', '10', '10', '10'], ['Claire', '15', '9', '12'], ['Marine', '12', '9', '12']] 

df = pd.DataFrame(columns = nl[0]) 

for l, c in zip(nl[0], range(4)): 
    df[l] = [ r[c] for r in nl[1:] ] 

df.sort_values(by = 'Nom', inplace = True) 
df.reset_index(drop = True, inplace = True) 

, die ergibt:

  Nom Francais Anglais Maths 
0 Catherine  9  17  9 
1  Claire  15  9 12 
2 Francois  14  8 15 
3  Gabriel  7  13  8 
4  Henri  10  12 13 
5  Karim  12  15 11 
6  Karine  9  10 10 
7  Marie  10  10 10 
8  Marine  12  9 12 
9  Rachel  15  15 14 
10  Roger  12  14 12 
11 Stephane  18  12  8 

und dann, wenn Sie eine CSV-pro Ihrem letzten Kommentar benötigen, ist es einfach:

df.to_csv('/directory/my_filename.csv', index = False) 
+0

Ok down-vote trolls ... was ist los mit diesem? Bitte sprechen Sie Ihre Meinung, wenn Sie denken, dass dies eine schlechte Lösung ist. Ich bin mir ziemlich sicher, dass es genau das tut, was das OP will. Down-Stimmen ohne Erklärung hindern die Leute daran, relevante Antworten zu posten und ziehen die gesamte Website herunter. – pshep123