Python:除第一行之外的排序列表

时间:2016-12-18 14:46:53

标签: python list sorting line

我有这个清单:

[['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']]

我想用名字(或换句话说,按照列表中每个列表的[0]元素的字母顺序)对其进行排序,但我不想要第一个列表(['Nom', 'Francais', 'Anglais', 'Maths'])要与其他人一起排序,怎么办呢?

非常感谢!

2 个答案:

答案 0 :(得分:3)

您可以使用范围分配:

>>> 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']]

答案 1 :(得分:0)

就个人而言,我会做这样的事情。但它假设你对Pandas感到半熟。这使您可以更灵活地使用数据。

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)

产生:

          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

然后如果你最近的评论需要一个.csv,那就简单了:

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