创建一个名为last_four的函数,该函数接收ID号并返回最后四位数字。例如,数字17573005应返回 3005。然后,使用此函数从最低到最高对存储在变量 id 中的 id 列表进行排序。将此排序列表保存在变量中,sorted_ids。提示:请记住,只能将字符串编入索引,因此可能需要进行转换。
问题的第二部分是,"按每个 id 的最后四位数字对列表 ID 进行排序。使用 lambda 而不是使用定义的函数执行此操作。将此排序列表保存在变量sorted_id中">
我已经定义了我的函数定义,以及它接受的输入。我创建了一个空列表,然后创建了一个 for 循环,该循环遍历我的输入值,其中我将最后四位数字附加到我创建的空列表中。我对输入中的所有项目执行此操作。我使用排序函数将我创建的列表设置为等于自身的排序版本,并且我让函数返回排序列表。
然后,我将变量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)
当我运行上面的代码时,我收到一个错误,说"错误:类型错误:'int'对象不可迭代",因为输入是 id 列表。通过阅读如何解决这个问题,我认为我的结果应该是"sorted_ids = sorted(ids, key = last_four)
"。当我尝试使用上一句中的代码片段时,我仍然得到与我之前提到的相同的 TypeError。我不确定如何使用可选的键参数编写它。
我还需要使用 Lambda 表达式编写函数,而无需定义函数last_four并获得相同的结果,我不确定该怎么做。
任何指导将不胜感激。
要使用带有lambda
函数的sorted
作为key
来执行此操作,您需要在lambda
函数中指定要对列表中的每个元素执行的操作。在这种情况下,您希望子集化为每个 id 的最后四个数字,这只能通过将整数 id 转换为字符串来完成。
这意味着具有key
lambda
函数的sorted
表达式为:
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
)可能更容易理解。
最好的方法是取数字的mod。例如:17573005%10000=3005,这是所需的结果。
def last_four(x):
return x%10000
然后调用此函数作为sorted()
函数的键
ids = [17573005, 17572342, 17579000, 17570002, 17572345, 17579329]
sorted_ids = sorted(ids,key=last_four)
现在使用 lambda 它看起来像:
sorted_id = sorted(ids,key = lambda k: k%10000)
这是错误的
def last_four(x): r = [] 对于 x 中的 i: r.append(str(i)[-4:])
r = sorted(r)
print(r)
return r
ID = [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)