我需要的是定义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
答案 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
>>>