2011-04-10 85 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'] 
相關問題