我不确定如何编写用于排序的函数(使用 Key 参数)和使用 Lambda 表达式重写函数

I'm Unsure How to Write a Function for Sorting (Using the Key Parameter) and Rewrite the Function Using a Lambda Expression

创建一个名为 last_four 的函数,它接受 ID 号和 return 最后四位数字。例如,数字 17573005 应该 return 3005。然后,使用此函数将存储在变量 ids 中的 ID 列表从低到高排序。将此排序列表保存在变量 sorted_ids 中。提示:请记住,只能索引字符串,因此可能需要转换。

问题的第二部分是,"Sort the list ids by the last four digits of each id. Do this using lambda and not using a defined function. Save this sorted list in the variable sorted_id"

我已经定义了我的函数定义,以及它接收的输入。我创建了一个空列表,然后我创建了一个 for 循环来遍历我的输入值,我在其中附加了最后四位数字到我创建的空列表。我对输入中的所有项目都这样做。我使用 sorted 函数将我创建的列表设置为等于其自身的排序版本,并且我有函数 returning 排序列表。

然后我使用指定的输入参数将变量 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)

当我 运行 上面的代码时,我收到一条错误消息,说 "Error: TypeError: 'int' object is not iterable" 因为输入是一个 ID 列表。通过阅读如何解决这个问题,我认为我的结果应该类似于“sorted_ids = sorted(ids, key = last_four)”。当我尝试使用上一句中的代码片段时,我仍然遇到与之前提到的相同的 TypeError。我不确定如何使用可选的 key 参数来编写它。

我还需要在没有定义函数的情况下使用 Lambda 表达式编写函数 last_four 并得到相同的结果,但我不确定该怎么做。

如有任何指导,我们将不胜感激。

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

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

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) 可能更容易理解。

这是错误的

def last_four(x): r = [] 对于我在 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)

你可以试试这个:

def last_four(x):
    x = x-17570000
    return x
a
ids = [17573005, 17572342, 17579000, 17570002, 17572345, 17579329]    
sorted_ids = sorted(ids, key=lambda x:last_four(x))
print(sorted_ids)

最好的方法是取 mod 个数字。例如:17573005%10000=3005 这是要求的结果。

def last_four(x):
    return x%10000

然后调用这个函数作为sorted()函数的key

ids = [17573005, 17572342, 17579000, 17570002, 17572345, 17579329]
sorted_ids = sorted(ids,key=last_four)

现在使用 lambda 看起来像:

sorted_id = sorted(ids,key = lambda k: k%10000)