使用函数和for循环反转列表项的内部序列。

时间:2017-03-16 18:24:50

标签: python list reverse

我需要帮助理解一直给我带来麻烦的家庭作业。我尝试了许多不同的方法来获得以下分配以产生所需的结果:

  
      
  1. 创建名为task_05.py
  2. 的模块   
  3. 创建一个名为flip_keys()的函数,该函数接受一个参数:    一个。名为to_flip的列表。假设此列表中包含嵌套的不可变序列,例如:[(1,2,3),'hello']
  4.   
  5. 使用for循环循环列表并反转内部序列的顺序。外部列表上的所有操作都必须在   原始对象,利用其可变性。内在元素   是不可改变的,需要更换。
  6.   
  7. 该函数应返回原始列表,其内部元素反转。
  8.   

我的教授将通过将以下内容归入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天,我没有得到教授或学生的支持(我告诉了我的顾问)。

1 个答案:

答案 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,改变一个可变论点并返回它并不感觉正确/传统。这可以在下一堂课中进行很好的讨论。