从最低的第一个数字排序

时间:2014-04-25 04:23:17

标签: python

我需要的是定义sort_by_level(成绩册)

sort_by_level(gb)

[('CS1010S', 'A+'), ('MA1101R', 'C'), ('SSA1207', 'B+'), ('CS2020', 'A')]

对成绩簿中的第一个数字进行排序。例如,' CS1010S'第一个数字是' 1'。 对我来说棘手的部分是“SSA1207”。其中第一个数字在第四位是1。

我的帮手:

def getting_code(module):
    for i in range(len(module)):
        if module[i] in [ "1","2","3","4","5","6","7","8","9","0"]:
            return module[i]

非常感谢!

编辑:我的问题与其余部分略有不同,我想通过使用例如:MODULE [0]中的FIRST NUMBER与使用等级排序的其他人进行排列,例如: A / B / C

4 个答案:

答案 0 :(得分:2)

您可以记住多次防止计算第一个数字的键:

grades = [('CS1010S', 'A+'), ('MA1101R', 'C'), 
          ('SSA1207', 'B+'), ('CS2020', 'A')]
grades = [(int(filter(lambda x: x.isdigit(), g[0])[0]), g) for g in grades ]
print sorted(grades)

给出:

[(1, ('CS1010S', 'A+')), (1, ('MA1101R', 'C')), 
         (1, ('SSA1207', 'B+')), (2, ('CS2020', 'A'))]

答案 1 :(得分:1)

您可以使用next()进行isdigit()检查,从字符串中获取第一个数字。

然后,使用sorted()和自定义key函数,从中提取列表中每个元组的第一项的字符串中的第一个数字:

def sort_by_level(gb):
    return sorted(gb, key=lambda x: int(next(i for i in x[0] if i.isdigit())))

data = [('CS1010S', 'A+'), ('MA1101R', 'C'), ('SSA1207', 'B+'), ('CS2020', 'A')]
print sort_by_level(data)

打印:

[('CS1010S', 'A+'), 
 ('MA1101R', 'C'), 
 ('SSA1207', 'B+'), 
 ('CS2020', 'A')]

答案 2 :(得分:0)

您可以像这样使用正则表达式

my_list=[('CS1010S', 'A+'), ('MA1101R', 'C'), ('SSA1207', 'B+'), ('CS2020', 'A')]
import re
print sorted(my_list, key=lambda (item, _): int(re.search(r"\d", item).group()))
# [('CS1010S', 'A+'), ('MA1101R', 'C'), ('SSA1207', 'B+'), ('CS2020', 'A')]

答案 3 :(得分:0)

使用for循环并使用内置str.isdigit()检查每个条目是否为数字。

>>> string = 'SSA1207'
>>> for k in string:
...     if k.isdigit() == True:
...             print 'The first digit is:', k
...             break
... 
The first digit is: 1
>>>