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

问题描述:

我想按升序排列Python中的列表。如何在Python中对列表进行排序?

下面是我的代码 -

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

所以上面打印语句将打印出这样的事情 -

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

or 

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

或以任何顺序..

现在我需要做确定分类后应该看起来像这样按升序排列

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

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

注:名字将永远开始test再接着some number

+2

字典排序或按数字排序? –

+3

你有什么尝试?您是否阅读过关于['list.sort'](http://docs.python.org/2/library/stdtypes.html#mutable-sequence-types)和['sorted']的文档(http:// docs .python.org/2 /库/ functions.html#排序)? –

尝试sorted()功能:

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

假设你想通过测试号的数组进行排序,你可以通过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'] 

你需要的是一个自然排序:

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) 

,然后如果你想它扭转,再加入reverse=True说法你做

lst.sort(key=natural_sort) 

。如果您不想排序(但创建一个新列表),请改为使用sorted(lst, key=natural_sort)