Python 使用函数和for循环反转列表项的内部顺序。
我需要帮助理解一个给我带来很多麻烦的家庭作业。我尝试了许多不同的方法来获得以下任务,以产生期望的结果:Python 使用函数和for循环反转列表项的内部顺序。,python,list,reverse,Python,List,Reverse,我需要帮助理解一个给我带来很多麻烦的家庭作业。我尝试了许多不同的方法来获得以下任务,以产生期望的结果: 创建名为task_05.py的模块 创建名为flip_keys()的函数,该函数接受一个参数: A.名为to_flip的列表。假设此列表中有嵌套的、不可变的序列,例如:[(1,2,3),“hello”] 使用for循环循环列表并反转内部序列的顺序。外部列表上的所有操作都必须在 原始对象,利用其易变性。内在因素 是不可变的,需要替换 函数应返回其内部元素颠倒的原始列表 我的教授将通过在pytho
>>> LIST = [(1, 2, 3), 'abc']
>>> NEW = flip_keys(LIST)
>>> LIST is NEW
True
>>> print LIST
[(3, 2, 1), 'cba']
我不知道我做错了什么,我的教授也没有回应。学生们也没有回应,我已经多次复习了材料,试图找到答案。我的脑子里有点不对劲
他提供了以下提示,我相信我已经在我的脚本中实现了这些提示:
暗示
考虑如何访问或更改列表的值。你做到了
已经在任务2中了
暗示
为了将中的值更改为_flip,您需要知道一些方法
您正在尝试更改的索引。为此,请创建一个变量
充当计数器并在循环中递增,例如:
对于iterable_对象中的值,计数器=0:
做一些计数器+ = 1现在考虑计数器可以代表什么。在这个循环的末尾,没有计数器==
len(iterable_对象)
暗示
要了解如何反转元组,请回到前面的
使用切片语法反转字符串时的赋值
以下是我最新的没有注释的脚本(因为在脚本运行之前我不会将它们写入):
当我使用上面粘贴的命令测试脚本时,我得到以下结果:
>>>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 = [(1, 2, 3), 'abc']
>>>NEW = flip_keys(LIST)
>>>LIST is NEW False
请让我知道这是否是足够的信息。我在这方面花了太多时间,现在我的作业晚了4天,我没有得到教授或学生的支持(我已经通知了我的导师) 您正在从函数返回一个新列表。使用完整的切片
[:]
赋值对原始列表进行就地变异
您还可以使用更传统的方法创建列表-列表理解-而不是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
在我看来,改变一个可变的参数并返回它是不正确的/传统的。这将有助于你在下一节课上进行很好的讨论。我想如果我更新我的答案,它会像你的一样。所以我会删除我的+1:-)谢谢你的快速回复。我认为这项任务只是为了演示列表中不可变数据类型的可变性。我不记得在课堂上看到过这样的语法,但我想我明白发生了什么。to_flip[:]告诉python查看列表中的每个值。改变值的循环是声明一个局部变量来存储从to_flip的每个值,然后将其反转并添加回列表中。我说得对吗?有没有更好的方法来解释这一点?有点,但变量是理解的局部变量(在Python3中)。翻转每个项目以创建一个新对象,然后使用这些项目构建一个新列表。使用完整片分配使用新列表中的值更新旧列表此语法仅在python 3.0中引入吗?我使用的是2.7.6(我相信)。当然不是版本3。另外,您将如何处理此任务以传统方式完成它?如果你不介意的话,我很想知道。
>>> LIST = [(1, 2, 3), 'abc']
>>> NEW = flip_keys(LIST)
>>> NEW
[(3, 2, 1), 'cba']
>>> NEW is LIST
True