我正在尝试按升序对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
。
答案 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)
。