问题描述
标题有点令人误解,但我无法真正描述它。
我有一个看起来像这样的清单。
a = [(4, 2), (4, 3), (2, 1), (1, 0), (1, 4)]
使用此代码,该列表已按元组的第一项排序。
a.sort( key = lambda x: x[0], reverse = True )
(我只是说列表已经排序,因此无需排序)
假定元组的第一项是扑克玩家的分数,第二项是每个扑克玩家的名字。 因此,上面的列表与此相同:
[(分数= 4,玩家2),(分数= 4,玩家3),(分数= 2,玩家1),(分数= 1,玩家0),(分数= 1,玩家= 4)]
有5个玩家,每个玩家的得分可以相同或不同。
我想根据他们的得分来评估球员,并希望在出现平局的情况下打印结果(因此,
Player 2 ties
Player 3 ties
Player 0 ties
Player 4 ties
玩家2和3得分相同(得分= 4),并列并列。 同样,玩家0和4并列,但由于他们的得分(得分= 1)低于玩家2和3,因此它们被打印在玩家2和3下方。
如何在Python中执行此操作?
1楼
这是为量身定制的问题:
>>> from itertools import groupby
>>> from operator import itemgetter
>>> L = [(4, 2), (4, 3), (2, 1), (1, 0), (1, 4)]
>>> for key, group in groupby(L, itemgetter(0)):
... group = list(group)
... if len(group) > 1:
... for k, player in group:
... assert k == key
... print(f'Player {player} ties')
... print()
...
Player 2 ties
Player 3 ties
Player 0 ties
Player 4 ties