模式中的排序列表

时间:2019-08-07 04:35:37

标签: python python-3.x

我目前有一个名为items的列表。我使用items.sort()使它们升序,但是我想要所需的输出。有什么简单但容易的方法可以在python中做到吗?

items = ['hat1', 'mat3', 'bat2', 'bat1', 'hat2', 'mat4', 'hat5', 'hat6', 'mat1']

当前O / P-

bat1, bat2, hat1, hat2, hat5, hat6, mat1, mat3, mat4

所需的O / P-

bat1, bat2
hat1, hat2, hat5, hat6
mat1, mat3, mat4

2 个答案:

答案 0 :(得分:5)

使用itertools.groupby

from itertools import groupby

items = ['hat1', 'mat3', 'bat2', 'bat1', 'hat2', 'mat4', 'hat5', 'hat6', 'mat1']

for k, g in groupby(sorted(items), key=lambda x: x[:3]):
    print(list(g))

# ['bat1', 'bat2']
# ['hat1', 'hat2', 'hat5', 'hat6']
# ['mat1', 'mat3', 'mat4'] 

答案 1 :(得分:0)

如果您希望将其保留为一个完整列表,则sorted可以使用:

sorted(items, key=lambda x:(x[:3], int(x[-1])))

输出:

['bat1', 'bat2', 'hat1', 'hat2', 'hat5', 'hat6', 'mat1', 'mat3', 'mat4']