在Python中排序矢量列表

时间:2016-01-20 22:20:10

标签: python sorting

我有一个包含其他列表中的几个寄存器的列表。我在每个元素的开头放了一个索引,以便我可以在以后订购,以便写入。

reg = index + ";" + cell[1] + ";" + hour + ";" + cell[0] + ";" + text[1] + ";"

最后,reg应该是这样的:

['5;01;11.32;RN_RT;Prep;', '9;02;2.12;ING;Prep;', '1;06;4.23;ING;Rec;']

有没有办法在开头使用索引对其进行排序/排序?

2 个答案:

答案 0 :(得分:1)

key=lambda s: int(s.split(';', 1)[0])排序。

答案 1 :(得分:1)

您可以编写一个小辅助函数:

def by_index(x):
    return int(x.split(';', 1)[0])

并将其用于排序:

L = ['5;01;11.32;RN_RT;Prep;','9;02;2.12;ING;Prep;','1;06;4.23;ING;Rec;']

sorted(L, key=by_index)

['1;06;4.23;ING;Rec;', '5;01;11.32;RN_RT;Prep;', '9;02;2.12;ING;Prep;']

函数sorted()采用关键字参数key

  

key指定一个参数的函数,该函数用于从每个列表元素中提取比较键:key = str.lower。默认值为None(直接比较元素)。

为列表中的每个元素调用此函数。所以:

int(x.split(';', 1)[0])

将第一个;之前的值拆分并将其转换为整数。这是索引。此索引将用于排序(排序键),但排序结果是索引顺序中的列表元素。

lambda只是在不使用def的情况下定义函数的另一种方法。它仅限于表达式,但可以内联使用。