我需要帮助理解一直给我带来麻烦的家庭作业。我尝试了许多不同的方法来获得以下分配以产生所需的结果:
- 创建名为task_05.py
的模块- 创建一个名为flip_keys()的函数,该函数接受一个参数: 一个。名为to_flip的列表。假设此列表中包含嵌套的不可变序列,例如:[(1,2,3),'hello']
- 使用for循环循环列表并反转内部序列的顺序。外部列表上的所有操作都必须在 原始对象,利用其可变性。内在元素 是不可改变的,需要更换。
- 该函数应返回原始列表,其内部元素反转。
醇>
我的教授将通过将以下内容归入python shell来评估我的脚本结果:
>>> LIST = [(1, 2, 3), 'abc']
>>> NEW = flip_keys(LIST)
>>> LIST is NEW
True
>>> print LIST
[(3, 2, 1), 'cba']
我不知道我做错了什么,我的教授没有回应。学生们也没有回复,我已经多次审阅这些材料,试图找到答案。有些东西没有点击我的大脑。
他提供了以下提示,我相信我已经在我的剧本中提出了建议:
提示
考虑如何访问或更改列表的值。你做到了 已经在任务2中了!
提示
要更改to_flip中的值,您需要一些方法来了解 你试图改变哪个索引。要做到这一点,创建一个变量 充当计数器并在循环中递增它,例如:
counter = 0表示iterable_object中的值:
做一些反击+ = 1现在考虑该计数器可以代表什么。在此循环结束时,计数器==
LEN(iterable_object)
提示
关于如何反转元组的想法,请回到之前的版本 使用切片语法反转字符串时的赋值。
这是我没有评论的最新脚本(因为我不会在脚本工作之前编写它们):
def flip_keys(to_flip):
for loop_list in to_flip:
to_flip = [to_flip[0][::-1], to_flip[1][::-1]]
return to_flip
当我使用上面粘贴的命令测试脚本时,我得到了以下结果:
>>>LIST = [(1, 2, 3), 'abc']
>>>NEW = flip_keys(LIST)
>>>LIST is NEW
False
>>>print flip_keys(LIST)
[(3, 2, 1), 'cba']
>>>print LIST
[(1, 2, 3), 'abc']
任务的目标是体验可变性,我想我理解。我面临的问题是LIST变量假设由函数更新,但这种情况永远不会发生。
以下应该评估为True,而不是false。然后打印存储在LIST常量中的反转列表值。
>>>LIST = [(1, 2, 3), 'abc']
>>>NEW = flip_keys(LIST)
>>>LIST is NEW False
如果这是足够的信息,请告诉我。我花了太多时间在这上面,此时我的任务迟到了4天,我没有得到教授或学生的支持(我告诉了我的顾问)。
答案 0 :(得分:1)
您正在从函数返回一个新列表。使用完整切片[:]
分配对原始列表执行就地变异。
您还可以使用更传统的方式创建列表 - 列表理解 - 而不是for循环:
def flip_keys(to_flip):
to_flip[:] = [i[::-1] for i in to_flip]
return to_flip
<强>测试强>
>>> LIST = [(1, 2, 3), 'abc']
>>> NEW = flip_keys(LIST)
>>> NEW
[(3, 2, 1), 'cba']
>>> NEW is LIST
True
IMO,改变一个可变论点并返回它并不感觉正确/传统。这可以在下一堂课中进行很好的讨论。