我不确定如何编写排序函数(使用键参数)并使用Lambda表达式重写函数

问题描述 投票:1回答:1

创建一个名为last_four的函数,该函数接收一个ID号并返回最后四位数。例如,数字17573005应返回3005.然后,使用此函数对存储在变量id中的id列表进行排序,从最低到最高。将此已排序列表保存在变量sorted_ids中。提示:请记住,只能对字符串编制索引,因此可能需要进行转换。

问题的第二部分是,“按每个id的最后四位对列表ID进行排序。使用lambda执行此操作,而不使用已定义的函数。将此已排序列表保存在变量sorted_id中”

我已经定义了我的函数定义,以及它所接受的输入。我创建了一个空列表,然后我创建了一个for循环,遍历输入的值,我将最后四位数追加到空列表中创建。我为输入中的所有项目执行此操作。我使用sorted函数将我创建的列表设置为等于自身的排序版本,并且我有返回排序列表的函数。

然后,我将变量sorted_ids设置为last_four,并指定输入参数。

def last_four(x):
    r = []
    for i in x:
        r.append(str(i)[-4:])

    r = sorted(r)
    print(r)
    return r

ids = [17573005, 17572342, 17579000, 17570002, 17572345, 17579329]

sorted_ids = last_four(ids)

当我运行上面的代码时,我得到一个错误,说“错误:TypeError:'int'对象不可迭代”,因为输入是一个id列表。从阅读如何解决这个问题,我认为我的结果应该是“sorted_ids = sorted(ids, key = last_four)”。当我尝试使用前一句中的代码片段时,我仍然得到与之前提到的相同的TypeError。我不确定如何使用可选的key参数编写它。

我还需要使用Lambda表达式编写函数,而没有定义函数last_four并获得相同的结果,我不知道该怎么做。

任何指导将不胜感激。

python-3.x function sorting lambda optional-parameters
1个回答
0
投票

要使用带有sorted函数的lambda作为key来执行此操作,您需要在lambda函数中为列表的每个元素指定要执行的操作。在这种情况下,您希望将每个id的最后四个数字子集化,这只能通过将整数id转换为字符串来完成。

这意味着sorted表达式与lambdakey函数是:

ids = [17573005, 17572342, 17579000, 17570002, 17572345, 17579329]
sorted(ids, key=lambda x: str(x)[-4:])

# Output
[17570002, 17572342, 17572345, 17573005, 17579000, 17579329]

这表示在将id转换为字符串后,按每个id的后四位数对列表进行排序。

使用命名函数执行此操作的等效方法是:

def last_four(x):
    return str(x)[-4:]

sorted(ids, key=last_four)

这个选择由你。 lambda表达式代码较少,但命名函数(last_four)可能更容易理解。

© www.soinside.com 2019 - 2024. All rights reserved.