由于您希望对输出进行排序,所以可以根据第一个元素对原始列表进行排序>>> first = lambda x: x[0]
>>> one_sorted = sorted(one, key=first)
然后您可以根据第一个元素使用^{}对元素进行分组,如下所示
^{pr2}$
因为您想按升序给组分配数字,所以可以用^{}这样来包装它enumerate(groupby(one_sorted, first), 1)
然后您可以unpack在for循环中enumerate的结果,如下所示for index, (item, group) in enumerate(groupby(one_sorted, first), 1)
现在您只需构造结果列表。您可以使用list comprehension来执行此操作,如下所示>>> from itertools import groupby
>>> [(index, item, [j[1] for j in group])
... for index, (item, group) in enumerate(groupby(one_sorted, first), 1)]
[(1, 2, ['c']), (2, 3, ['b', 'd']), (3, 4, ['a']), (4, 5, ['e']), (5, 6, ['f'])]
[j[1] for j in group]实际上迭代分组的项并获取第二项,即实际的字符串。在
或者,可以将元素分组到字典中,如下所示>>> groups = {}
>>> for number, string in one:
... groups.setdefault(number, []).append(string)
...
...
>>> groups
{2: ['c'], 3: ['b', 'd'], 4: ['a'], 5: ['e'], 6: ['f']}
然后返回应用排序字典上的enumerate,如下所示>>> [(index, number, groups[number])
... for index, number in enumerate(sorted(groups), 1)]
[(1, 2, ['c']), (2, 3, ['b', 'd']), (3, 4, ['a']), (4, 5, ['e']), (5, 6, ['f'])]