使用不带内置函数的append-remove方法在数组Python中反转列表

使用不带内置函数的append-remove方法在数组Python中反转列表,python,reverse,Python,Reverse,我正在尝试使用append和remove方法反转列表。但是我的解决方法有一个问题。也许有人能给我一个更好的解释 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)) 不能

我正在尝试使用append和remove方法反转列表。但是我的解决方法有一个问题。也许有人能给我一个更好的解释

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.append
,因为它会附加到列表的末尾。您想要的是附加到列表的开头。为此,请使用
列表。插入
。有关更多详细信息,请参阅

另一个选择当然是使用

在你的问题中对守则提出一些建设性的批评

  • 除非您真的打算使用全局变量,否则不要引用函数之外的变量<代码>按顺序列出。remove(i)
  • 指的是全局变量,而不是函数参数(尽管在本例中它们最终指的是同一事物)。这可能是一个打字错误,但值得指出的是,它并不完全正确
  • 不要使用隐藏内置类型的变量名<代码>列表
  • 目录
    元组
    集合
    等。。。这些不是变量的好名称,因为它们将隐藏这些类型,使其无法在变量所在的范围内进一步使用,并且可能很难找到导致错误的来源
  • 让你的功能做两件事中的一件;修改输入(称为就地修改)并返回
    None
    ,或者创建一个新集合并返回该集合
  • 修改集合时不要迭代集合。有关详细信息,请参见链接复制

  • 你想要[6,5,4,3,2,1]作为结果吗? 如果是这样,只需使用
    按顺序列出[:-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
    
    • 不要在循环中删除列表元素
    • 不要对变量/参数名称使用“列表”

      • 我会这样做:

        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))
        

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

        不要从原始列表中删除元素,只需构建一个新列表。在遍历列表时,您正在从列表中删除元素。这永远不会有好结果。此外,不要将变量命名为
        list
        。这违反了一条基本的编程规则——不要修改正在迭代的数组(列表)。此外,如果要从开始到结束和反向遍历列表,则需要转到另一个方向。
        >>> [1,2,3,4,5,6][::-1]
        [6, 5, 4, 3, 2, 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
        
        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))