从最底层排序

2024-09-26 17:44:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要的是定义排序按级别(成绩册)在哪里

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]

非常感谢!你知道吗

编辑:我的问题与其他问题略有不同,因为我希望通过使用例如:模块[0]中的第一个数字进行排序,而其他问题则使用例如:A/B/C的等级进行排序


Tags: inby定义排序数字级别sortlevel
3条回答

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

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'))]

您可以使用带有^{}检查的^{}从字符串中获取第一个数字。你知道吗

然后,将^{}与自定义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')]

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

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')]

相关问题 更多 >

    热门问题