数组 Python 中的反向列表使用没有内置函数的追加删除方法

Reverse list in array Python using append remove method without build in function

我正在尝试使用附加和删除方法来反转列表。但是我做这个解决方案的方法有问题。也许有人能给我更好的解释

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

您不能使用 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. 让你的函数做两件事之一;修改输入(称为就地修改)和 return None 或创建一个新集合并 return that.
  4. 不要在修改集合时对其进行迭代。请参阅链接的 dupe 进行详细说明。

你想要 [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
  • 不要在循环中删除列表元素。
  • 不要使用 'list' 作为 variable/parameter 名称。

我会这样做:

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

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