【问题标题】:Python: sort list except first linePython:除第一行外的排序列表
【发布时间】:2017-05-03 17:33:27
【问题描述】:

我有这个清单:

[['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] 元素的字母顺序)但我不想不想要第一个列表(@987654322 @) 与其他人一起排序,怎么能这样做?

非常感谢!

【问题讨论】:

  • 你尝试了吗?第一行是什么意思?列表中的第一个元素?
  • 我的意思是我希望 ['Nom', 'Francais', 'Anglais', 'Maths'] 先保留,然后对其他元素进行排序。 (对不起我的英语不好)
  • 更好的问题:为什么要将标题信息存储在列表本身中?
  • 好的,跳过第一个元素,你可以使用列表切片,比如my_list[1:]
  • Maxime - 您是否有理由不能为此使用字典或数据框?

标签: python list sorting line


【解决方案1】:

你可以使用范围赋值:

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

【讨论】:

    【解决方案2】:

    就个人而言,我会做这样的事情。但它假设你对 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)
    

    【讨论】:

    • 好吧,投反对票的巨魔……这有什么问题?如果您认为这是一个不好的解决方案,请说出您的想法。我很确定它完全符合 OP 的要求。没有解释的否决票会阻止人们发布相关答案并拖垮整个网站。
    猜你喜欢
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2017-02-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    相关资源
    最近更新 更多