在不破坏Python关系的情况下排列列表

时间:2014-09-15 13:29:58

标签: python list python-2.7 ranking

我需要将排名归因于列表的元素,同时确保绑定的元素获得相同的排名。

例如:

data = [[1],[3],[2],[2]]

c = 0

for i in sorted(data, reverse=True):
    i.append(c+1)
    c += 1

print data

返回:

[[1, 4], [3, 1], [2, 2], [2, 3]]

将得分附加到得分。

我需要更改为这个简单的代码,而不是获取:

[[1, 3], [3, 1], [2, 2], [2, 2]]

如果得分为2的元素被绑定并且两者都获得第二名,而前一个第四名被提升到第三位?

1 个答案:

答案 0 :(得分:5)

使用itertools.groupbyenumerate

>>> from itertools import groupby
>>> data = [[1],[3],[2],[2]]
>>> sorted_data = sorted(data, reverse=True)
>>> for rank, (_, grp) in enumerate(groupby(sorted_data, key=lambda xs: xs[0]), 1):
...     for x in grp:
...         x.append(rank)
...
>>> print data
[[1, 3], [3, 1], [2, 2], [2, 2]]