从头开始为python列表创建反向方法

5 python reverse list

我想为列表创建一个反向方法.我知道python中已经有这样的方法,但我想从头开始尝试.这就是我所拥有的,它似乎对我有意义,但它只是以相同的顺序返回列表.我的理解是列表是可变的,我可以在循环中重新分配值.

def reverse(data_list):
    length = len(data_list)
    s = length

    for item in data_list:
        s = s - 1
        data_list[s] = item
    return data_list
Run Code Online (Sandbox Code Playgroud)

Blu*_*eft 14

def reverse(data_list):
    return data_list[::-1]
Run Code Online (Sandbox Code Playgroud)
>> reverse([1,2,3,4,5])
[5, 4, 3, 2, 1]


mou*_*uad 5

您正在更改要迭代的列表(data_list),因为该列表不起作用,请尝试执行以下操作:

def reverse(data_list):
    length = len(data_list)
    s = length

    new_list = [None]*length

    for item in data_list:
        s = s - 1
        new_list[s] = item
    return new_list
Run Code Online (Sandbox Code Playgroud)

  • `[None] * length`将创建一个像这样的列表[None,None ...]长度,并且大约`new_list = []`将不起作用,因为这将创建一个0元素的列表,因此当您尝试执行`new_lits [1] = ..`会导致索引错误,因为列表中没有索引1,基本上`new_lits [1] = ..`用新值更改索引1的值,不添加。希望这有意义:) (2认同)

Hug*_*ell 5

到列表中途时,您已经交换了所有项目;当您继续进行下半部分时,您将全部交换回原来的位置。

试一试

def reverse(lst):
    i = 0            # first item
    j = len(lst)-1   # last item
    while i<j:
        lst[i],lst[j] = lst[j],lst[i]
        i += 1
        j -= 1
    return lst
Run Code Online (Sandbox Code Playgroud)

有两种使用方法:

a = [1,2,3,4,5]
reverse(a)        # in-place
print a           # -> [5,4,3,2,1]

b = reverse(a[:]) # return the result of reversing a copy of a
print a           # -> [5,4,3,2,1]
print b           # -> [1,2,3,4,5]
Run Code Online (Sandbox Code Playgroud)