如何按分数对列表进行排序?

时间:2015-01-22 17:55:30

标签: python sorting python-3.4

我如何按 分数 对此列表进行排序?

class1=['Andy J:6','Nick P:7','Bob G:1','Evie F:5','James M:9','Jarrod B:10','Sean J:7']

打印时,它采用格式

['Jarrod B:10','Andy J:6','James M:9','Nick P:7',  'Sean J:7', 'Evie F:5' , 'Bob G:1' ]

他们的号码是他们的分数。

2 个答案:

答案 0 :(得分:1)

您可以使用sort(),自定义键功能和一些正则表达式来执行您想要的操作。

import re   # Regular expressions for string matching

def score_key( x ) :
    patt = ":(\d+)$"   # Matches the score after the colon
    return int( re.search( patt, x ).group( 1 ) )

class1 = ['Andy J:6','Nick P:7','Bob G:1','Evie F:5','James M:9','Jarrod B:10','Sean J:7']
class1.sort( key=score_key )
print( class1 )   # ['Bob G:1', 'Evie F:5', 'Andy J:6', 'Nick P:7', 'Sean J:7', 'James M:9', 'Jarrod B:10']

如果您想降序,请改用class1.sort( key=score_key, reverse=True )

答案 1 :(得分:0)

你可以使用带有简单sorted()函数参数的内置key函数 - 我不认为字符串的格式足够复杂以保证使用{{1一次调用re字符串方法就足够了。

split()

输出:

class1 = ['Andy J:6', 'Nick P:7', 'Bob G:1', 'Evie F:5', 'James M:9',
          'Jarrod B:10','Sean J:7']

print( sorted(class1, key=lambda e: int(e.split(':')[1])) )