我需要将排名归因于列表的元素,同时确保绑定的元素获得相同的排名。
例如:
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的元素被绑定并且两者都获得第二名,而前一个第四名被提升到第三位?
答案 0 :(得分:5)
使用itertools.groupby
,enumerate
:
>>> 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]]