【问题标题】:Reverse list in array Python using append remove method without build in function [duplicate]在没有内置函数的情况下,使用追加删除方法在数组 Python 中反转列表 [重复]
【发布时间】:2019-01-15 01:09:18
【问题描述】:

我正在尝试使用追加和删除方法来反转列表。但是我执行此解决方案的方法存在问题。也许有人给我一个更好的解释

list_in_order = [1,2,3,4,5,6]
def reverse(list):
    r=[]
    for i in list:
        print (i)
        r.append(i)
        list_in_order.remove(i)
    return r

print(reverse(list_in_order))

【问题讨论】:

  • 不要从原始列表中删除元素,只需构建一个新列表。您正在从列表中删除元素,同时对其进行迭代。这永远不会结束。
  • 另外,不要将变量命名为list
  • 你违反了一个基本的编程规则——不要修改你正在迭代的数组(列表)。此外,您正在从头到尾遍历列表并反转,您需要走另一条路。

标签: python reverse


【解决方案1】:

您不能使用list.append,因为它会附加到列表的末尾。您想要的是附加到列表的开头。为此使用list.insert。更多详情请参阅list docs

list_in_order = [1,2,3,4,5,6]

def reverse(L):
    r = []
    for i in L:
        r.insert(0, i)
    return r

print(reverse(list_in_order))

另一个选项当然是使用slice notation

>>> [1,2,3,4,5,6][::-1]
[6, 5, 4, 3, 2, 1]

对您问题中的代码提出一些建设性的批评

  1. 不要引用函数之外的变量,除非你真的打算使用全局变量。 list_in_order.remove(i) 指的是您的全局变量,而不是您的函数参数(尽管在这种情况下它们最终指的是同一件事)。这可能是一个错字,但值得指出的是它并不完全正确。
  2. 不要使用隐藏内置类型的变量名。 listdicttupleset 等...这些不是变量的好名称,因为它们会隐藏这些类型,无法在变量存在的范围内进一步使用,并且可能很难找到您因此而得到的错误的来源。
  3. 让你的函数做两件事之一;要么修改输入(称为就地修改)并返回 None,要么创建一个新集合并返回它。
  4. 不要在修改集合时对其进行迭代。有关详细信息,请参阅链接的欺骗。

【讨论】:

    【解决方案2】:
    In [11]: list_in_order = [1,2,3,4,5,6]
    
    In [12]: list(reversed(list_in_order))
    Out[12]: [6, 5, 4, 3, 2, 1]
    

    【讨论】:

      【解决方案3】:

      你想要 [6, 5, 4, 3, 2, 1] 作为结果吗? 如果是这样,只需使用list_in_order[::-1]

      如果必须使用追加和删除,

      list_in_order = [1,2,3,4,5,6]
      
      def reverse_list(target_list):
          copied_list = target_list.copy()
          r=[]
          for i in reversed(target_list):
              r.append(i)
              copied_list.remove(i)
          return r
      
      • 在循环中不要删除列表元素。
      • 不要使用“列表”作为变量/参数名称。

      【讨论】:

        【解决方案4】:

        我会这样:

        list_in_order = [1,2,3,4,5,6]
            def reverse(list):
                counter = len(list)
                for i in range(0,counter/2):
                    print(i)
                    list[i],list[counter-i] = list[counter-i], list[i]
                return list
        
        print(reverse(list_in_order))
        

        这是一种方法,但您可以使用递归来实现 :)

        【讨论】:

          猜你喜欢
          • 2017-01-22
          • 2021-09-20
          • 1970-01-01
          • 1970-01-01
          • 2019-02-20
          • 2015-07-09
          • 1970-01-01
          • 1970-01-01
          • 2016-02-24
          相关资源
          最近更新 更多