【问题标题】:reverse list and append it to istelf反向列表并将其附加到自身
【发布时间】:2021-12-01 01:46:22
【问题描述】:

我试图在函数中输入一个列表,然后输出将是列表,然后将列表的反向添加到自身,但由于某种原因,每当我反转变量反转时,它也会反转列表

def mirror(list):
    reversel = list
    reversel.reverse()
    list.extend(reversel)
    return list

    
    
    
test = ["alpha", "beta"]
print(mirror(test))

输出

['beta', 'alpha', 'beta', 'alpha']

期望的输出

["alpha","beta","beta","alpha"]

【问题讨论】:

    标签: python python-3.x list


    【解决方案1】:

    你可以使用切片:

    def mirror(lst):
        return lst + lst[::-1]
    
    test = ["alpha", "beta"]
    print(mirror(test)) # ['alpha', 'beta', 'beta', 'alpha']
    

    提供的代码中的一个问题是 (i) reversel = list(但不要使用 list 作为名称)复制对象,并且 (ii) reverse()反转列表就地。因此,这两行代码反转列表list(以及reversel)。结果,现在listreversel ["beta", "alpha"]。然后在list.extend(reversel) 之后,list 就变成了你观察到的东西。

    另外,还有一个微妙的问题;通常不建议同时执行以下两项操作:(i) 修改给定对象,以及 (ii) 返回对象;这可能会引起混乱(我相信)。最好只做其中一个;就地修改对象(如reverse),或不修改对象但返回对象的修改副本(如reversed)。

    【讨论】:

      【解决方案2】:

      这是一个不使用reverse()的解决方案。

      def mirror(list_to_mirror):
          
          reversel = list_to_mirror
          reversel = reversel[::-1]
          #This is an equivilant to reverse()
          list_to_mirror.extend(reversel)
          
          return list_to_mirror
      
      if __name__ == "__main__":
          test = ["alpha", "beta"]
          print(mirror(test))
      

      【讨论】:

      • 您通过引入reversel 变量使这变得过于复杂。只需将第一行放到函数中的代码行并使用list_to_mirror.extend(list_to_mirror[::-1])
      【解决方案3】:

      这应该可行 -

      def mirror(list):
          reversel = [i for i in list]
          reversel.reverse()
          list.extend(reversel)
          return list
      
          
          
          
      test = ["alpha", "beta"]
      print(mirror(test))
      

      当使用 '=' 时,它会存储变量的位置。因此,当使用 reverse 之类的函数时,两个值都会发生变化。

      【讨论】:

        【解决方案4】:

        一种不需要创建和丢弃副本的方式:

        def mirror(lst):
            lst += reversed(lst)
            return lst
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-10-11
          • 1970-01-01
          • 2016-12-16
          • 1970-01-01
          • 2020-08-06
          • 1970-01-01
          • 2020-10-04
          • 1970-01-01
          相关资源
          最近更新 更多