如何在Python中对列表进行排序?

时间:2013-11-21 21:23:26

标签: python list sorting

我正在尝试按升序对Python中的列表进行排序。

以下是我的代码 -

children=zk.get_children("/my/example", watch=my_func)
print(children)

因此上面的print语句将打印出类似的内容 -

[u'test2', u'test1', u'test3']

or

[u'test3', u'test2', u'test1']

或以任何顺序..

现在我需要确保在排序后它应该按升序显示

[u'test1', u'test2', u'test3']

有什么想法如何在Python中有效地完成这项工作?

注意:名称始终以test开头,然后是some number

3 个答案:

答案 0 :(得分:4)

尝试sorted()功能:

>>> sortedList = sorted([u'test3',u'test2',u'test5'])
>>> print sortedList
[u'test2', u'test3', u'test5']

答案 1 :(得分:4)

假设您要按测试编号对数组进行排序,您只需传递sorted key函数,该函数将在每个'test'的末尾提取数字:

>>> tests = [ "test%s" % i for i in range(1, 15) ]
>>> sorted(tests, key=lambda t: int(t[4:]))
['test1', 'test2', 'test3', 'test4', 'test5', 'test6', 'test7', 'test8',
 'test9', 'test10', 'test11', 'test12', 'test13', 'test14']

答案 2 :(得分:2)

您需要的是自然类型:

import re

convert = lambda text: int(text) if text.isdigit() else text.lower() 
alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', key) ] 

def natural_sort(l): 
    return sorted(l, key=alphanum_key)

然后你做

lst.sort(key=natural_sort)

如果你想要它反转,那么添加reverse=True参数。如果您不想排序(但创建新列表),请改用sorted(lst, key=natural_sort)