[Python]如何用两个变量排序字符串?
你好,我对Python还不是很熟悉,请多多包涵。
我的Python程序有以下几行代码:
print "玩家 1: " + str(player1points)
print "玩家 2: " + str(player2points)
print "玩家 3: " + str(player3points)
print "玩家 4: " + str(player4points)
这些玩家的分数是我程序计算出来的,所以每次运行时都会不同。
运行结果会是:
玩家 1: 3
玩家 2: 4
玩家 3: 3
玩家 4: 5
如果可以的话,我想把结果排序,先按分数从高到低排列,然后再按玩家的编号。如果有两个玩家的分数相同,那么编号小的玩家排在前面。
所以我希望我的结果能像这样:
玩家 4: 5
玩家 2: 4
玩家 1: 3
玩家 3: 3
任何帮助都非常感谢!!
5 个回答
0
sorted(values, key=lambda s: s.split(': ')[1], reverse=True)
这段代码的意思是……
首先,它会做一些初始化的工作,比如设置一些变量的初始值。接着,它会进入一个循环,这个循环会一直执行,直到满足某个条件为止。在循环内部,它会不断地检查一些状态,并根据这些状态来决定接下来要做什么。
如果在循环中遇到特定的情况,它可能会跳出循环,或者执行一些特定的操作。最后,当循环结束后,代码会继续执行后面的部分,完成整个程序的任务。
总的来说,这段代码的结构很常见,主要是通过循环和条件判断来控制程序的执行流程。
1
如果你已经有了玩家对象或者字典,你可以用下面的方式进行排序:
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()