【发布时间】:2019-04-30 15:11:13
【问题描述】:
创建一个名为 last_four 的函数,该函数接受一个 ID 号并返回最后四位数字。例如,数字 17573005 应该返回 3005。然后,使用此函数将存储在变量 ids 中的 id 列表从低到高排序。将此排序列表保存在变量 sorted_ids 中。提示:请记住,只能索引字符串,因此可能需要进行转换。
问题的第二部分是,“按每个 id 的最后四位对列表 id 进行排序。使用 lambda 而不是使用定义的函数来执行此操作。将此排序后的列表保存在变量 sorted_id 中”
我已经定义了我的函数定义,以及它接受的输入。我已经创建了一个空列表,然后我创建了一个循环遍历我的输入值,我将最后四位数字附加到我创建的空列表。我对输入中的所有项目都这样做。我使用 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' object is not iterable”,因为输入是一个 id 列表。通过阅读如何解决这个问题,我认为我的结果应该类似于“sorted_ids = sorted(ids, key = last_four)”。当我尝试使用上一句中的代码 sn-p 时,仍然得到与之前提到的相同的 TypeError。我不确定如何使用可选的 key 参数来编写它。
我还需要在没有定义函数 last_four 的情况下使用 Lambda 表达式编写函数并获得相同的结果,但我不知道该怎么做。
任何指导将不胜感激。
【问题讨论】:
-
我复制并粘贴了您的代码,它在 Python 3.7.3 中无需修改即可工作,输出为:
['0002', '2342', '2345', '3005', '9000', '9329']。你目前使用的是什么版本的 Python? -
@willk,我刚刚在 repl.it 中尝试过,它在那个环境中工作。我进行练习的环境是 Runestone 3.3.2 - interactivepython.org/runestone/static/overview/overview.html。我不清楚它是哪个版本的 Python。我认为要传递作业,我需要使用可选的 key 参数 - “sorted_ids = sorted(ids, key = last_four)”,我还没有弄清楚如何用 Runestone 编写。我还需要使用 Lambda 表达式重写,我不知道该怎么做。你有什么想法吗?
-
是的,我了解您的需求并已发布我的回复。
标签: python-3.x function sorting lambda optional-parameters