Python找到一个拥有最多"赢得"列表

时间:2018-03-22 05:22:38

标签: python list

我需要一些帮助,试图找出一个我正在努力编写的快速算法。基本上我有一个看起来像这样的列表:

season = [[['P1', '3', 'P2', '4'], ['P3', '2', 'P4', '1'], 
           ['P1', '2', 'P3', '5'], ['P4', '2', 'P1', '3']]]

每个嵌套列表代表玩家之间游戏中的得分,列表中有更多嵌套列表,其格式如上图所示,玩家最多可达32个。

我想要做的是写一个算法,让我能够显示在列表中获胜最多的玩家,以及他们取得的胜利数量,我正在努力弄清楚如何做这个,所以任何帮助都将不胜感激!

以下是我到目前为止:

count = 0
for matchScores in season:
    for scores in matchScores:
        playerName = score[0]
        if playerName and score[1] > score[3]
            count = count + 1

列表'赛季'是由:

创建的
season = []
season.append(tournament1)
season.append(tournament2)
season.append(tournament3)

2 个答案:

答案 0 :(得分:1)

你可以做这样的事情

<强>代码

scores = dict()

for match in season:
  for score in match:
    if int(score[1]) > int(score[3]):
      if score[0] not in scores:
        scores[score[0]] = 0

      scores[score[0]] += 1

    elif int(score[1]) < int(score[3]):
      if score[2] not in scores:
        scores[score[2]] = 0

      scores[score[2]] += 1

print(scores)

<强>结果

{'P2': 1, 'P3': 2, 'P1': 1}

这将为您提供所有球员及其分数的字典。从那里,你可以做这样的事情

player_with_most_wins = max(scores, key=scores.get) 
print(player_with_most_wins + " has " + str(scores[player_with_most_wins]) + " wins")

打印出获胜最多的玩家,以及他们获得的胜利次数如下:

P3 has 2 wins

答案 1 :(得分:0)

以下是将胜利与每位玩家联系起来的一种方式:

代码:

season = [[['P1', '3', 'P2', '4'], ['P3', '2', 'P4', '1'],
           ['P1', '2', 'P3', '5'], ['P4', '2', 'P1', '3']]]


wins = {}
for matchScores in season:
    for score in matchScores:
        p1, s1, p2, s2 = score
        s1, s2 = int(s1), int(s2)
        if s1 > s2:
            wins.setdefault(p1, []).append(score)
        elif s1 < s2:
            wins.setdefault(p2, []).append(score)

print(wins)

结果:

{
    'P2': [['P1', '3', 'P2', '4']], 
    'P3': [['P3', '2', 'P4', '1'], ['P1', '2', 'P3', '5']], 
    'P1': [['P4', '2', 'P1', '3']]    
}