我有一个包含其他列表中的几个寄存器的列表。我在每个元素的开头放了一个索引,以便我可以在以后订购,以便写入。
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;']
有没有办法在开头使用索引对其进行排序/排序?
答案 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
的情况下定义函数的另一种方法。它仅限于表达式,但可以内联使用。