2011-04-10 141 views
2

你好我对python有点新,所以请耐心等待。[Python]如何用两个变量对字符串进行排序?

我的Python程序具有以下线:

打印 “玩家1:” + STR(player1points)

打印 “玩家2:” + STR(player2points)

打印“播放机3 :“+ STR(player3points)

打印 ”玩家四:“ + STR(player4points)

玩家#点是我的计划已经计算出它是,所以DIF每次我运行它时都会变得更糟。

结果将产生:

播放机1:3

玩家2:4

播放机3:3

播放4:5

如果可能,我想对结果进行排序,以便每个玩家的积分从高到低依次排列,然后是玩家。如果两名球员并列得分,那么编号最低的球员将首先列出。

因此,我希望我的结果是这样的:

播放4:5

玩家2:4

玩家1:3

玩家3:3

任何帮助将非常感谢!

+2

你需要告诉我们你尝试过什么,并在那里你失败的区别。 – user225312 2011-04-10 18:21:48

+1

你可以在它们变成一个字符串之前对它们进行排序,即。当你有分数和玩家ID分开时? – 2011-04-10 18:21:57

+0

这些玩家在你的代码中是如何表现的? – Cameron 2011-04-10 18:22:02

回答

-1

我不是太熟悉的语法或方法可用于Python,但为什么在由该值的字符串和秩序无法访问的最后一个字符?

+5

比完全不合适的答案更好的答案 – 2011-04-10 18:24:06

0
sorted(values, key=lambda s: s.split(': ')[1], reverse=True) 
+0

不按照OP的要求工作。请看我的答案。 – eyquem 2011-04-10 22:41:22

2

如果你已经拥有的球员对象或字典的例子,你可以进行排序以:

players.sort(key=lambda player: player.score, reverse=True) 

如果没有,处理您的阵列和分裂在每一个 ':'

样品:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 

def main(): 
    "entry point" 
    player_strings = ['Player 1:3', 'Player 2:4', 'Player 3:3', 'Player 4:5'] 
    players = [] 
    for player_string in player_strings: 
     name, score = player_string.split(':') 
     players.append({'name':name, 'score':score}) 
    players.sort(key=lambda player: int(player['score']), reverse=True) 
    for player in players: 
     print ('%s has a score of %s' % (player['name'], player['score'])) 

if __name__ == '__main__': 
    main() 
0

将一个“键函数”传递给list.sort方法允许您自定义它如何排序。

def sort_players(players): 
    r"""Sort the players by points. 

    >>> print sort_players('Player 1: 3\n' 
    ...     '\n' 
    ...     'Player 2: 4\n' 
    ...     '\n' 
    ...     'Player 3: 3\n' 
    ...     '\n' 
    ...     'Player 4: 5\n') 
    Player 4: 5 
    Player 2: 4 
    Player 1: 3 
    Player 3: 3 
    """ 
    # split into a list 
    players = players.split("\n") 

    # filter out empty lines 
    players = [player for player in players if player != ''] 

    def points(player_report): 
     """Parse the number of points won by a player from a player report. 

     A "player report" is a string like 'Player 2: 6'. 
     """ 
     import re 
     # Match the last string of digits in the passed report 
     points = re.search(r'\d+$', player_report).group() 
     return int(points) 

    # Pass `points` as a "key function". 
    # The list will be sorted based on the values it returns. 
    players.sort(key=points, reverse=True) 

    # Make the sorted list back into a string. 
    return "\n".join(players) 
+0

这个答案真的很有帮助!然而,对于我的程序,我将它设置为“玩家1:”+ str(player1points),而不是“玩家1:3”。player1points分配给程序计算的任何位置。我将如何使用这个函数接受我的字符串? – 2011-04-10 19:21:25

+0

@Bob腰:不知道我是否理解你。 'points'函数使用的正则表达式会在给定的“玩家报告”中找到最后一串数字('\ d +')。我使用术语“玩家报告”来表示像“玩家2:6”这样的字符串。所以只要您的'player1points'在报告字符串的末尾是一个正整数,'points'将会以整数形式返回它。 – intuited 2011-04-10 19:36:06

+0

对不起,我是一个新手,当谈到这一点。 – 2011-04-10 19:55:10

0

假设的 '玩家报告' 是在一个列表:

values = ['Player 1: 3','Player 2: 4','Player 3: 3','Player 4: 5'] 

values.sort(key=lambda s: [(-int(b),a) for a,b in (s.split(':'),)]) 

print values 

结果

['Player 4: 5', 'Player 2: 4', 'Player 1: 3', 'Player 3: 3'] 

=============

Bob Loin说他想获得

Player 4: 5, Player 2: 4, Player 1: 3, Player 3: 3

丹尼尔的罗斯曼工作得很好或不依赖于处理的列表。

我的解决方案给出了正确的结果。看到第二个列表

values = ['Player 1: 3','Player 2: 4','Player 3: 3','Player 4: 5'] 

print ' ',values 
print 
print 'Dan',sorted(values, key=lambda s: s.split(': ')[1], reverse=True) 
print 'eyq',sorted(values, key=lambda s: [(-int(b),a) 
              for a,b in (s.split(':'),)]) 

print '\n===================================\n' 

values = ['Player 3: 3','Player 2: 4','Player 1: 3','Player 4: 5'] 

print ' ',values 
print 
print 'Dan',sorted(values, key=lambda s: s.split(':')[1], reverse=True) 
print 'eyq',sorted(values, key=lambda s: [(-int(b),a) 
              for a,b in (s.split(': '),)]) 

结果

['Player 1: 3', 'Player 2: 4', 'Player 3: 3', 'Player 4: 5'] 

Dan ['Player 4: 5', 'Player 2: 4', 'Player 1: 3', 'Player 3: 3'] 
eyq ['Player 4: 5', 'Player 2: 4', 'Player 1: 3', 'Player 3: 3'] 

=================================== 

    ['Player 3: 3', 'Player 2: 4', 'Player 1: 3', 'Player 4: 5'] 

Dan ['Player 4: 5', 'Player 2: 4', 'Player 3: 3', 'Player 1: 3'] 
eyq ['Player 4: 5', 'Player 2: 4', 'Player 1: 3', 'Player 3: 3'] 
相关问题