繁体   English   中英

Python使用相同的len将列表的所有元素向后移动一个位置

[英]Python move all elements of a list one position back with same len

def list_move_back(new_value, value_list):
    for i in reversed(value_list):
        if value_list.index(i) != len(value_list)-1:
            value_list[value_list.index(i)+1] = i
    value_list[0] = new_value
    return value_list

我想得到以下结果:

list_example = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_example = list_move_back(12, list_example]
print(list_example)
>>>[12, 1, 2, 3, 4, 5, 6, 7, 8, 9]

如果我运行该函数两次,它会起作用:

list_example = list_move_back(12, list_example]
    print(list_example)
    >>>[12, 12, 1, 2, 3, 4, 5, 6, 7, 8]

但是如果我想第三次运行它,结果看起来像这样:

list_example = list_move_back(12, list_example]
        print(list_example)
        >>>[12, 12, 1, 1, 3, 4, 5, 6, 7, 8]

第一个 1 应该是 12。我不知道为什么它不起作用。

只需使用列表切片:

def list_move_back(new_value, list_of_values):
    return [new_value] + list_of_values[:-1]

说明: list_of_values[:-1]返回除最后一个之外的所有元素。 通过将其附加到新值,您可以获得想要的结果。 这个答案对列表切片的工作原理有一个非常酷的解释。

此外,如果由于某种原因您想要“详细”的方式来做到这一点(也许是为了练习或其他),这里有一种方法:

def list_move_back(new_value, list_of_values):

    for i in range(len(list_of_values)-1, 0, -1):
        list_of_values[i] = list_of_values[i-1]
    list_of_values[0] = new_value

    return list_of_values

我建议对这种方法进行 9/10 次列表切片,但同样,我只是把它放在这里,因为可能有一种情况,有人想把它作为某种索引的心理锻炼。

如果您需要更改列表的位置,您可以使用list方法.pop()删除最后一项并使用.insert(0,value)将一项添加到前面:

>>> L = list(range(1,11))
>>> L
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> id(L)
1772071032392
>>> L.pop();L.insert(0,12)
10
>>> L
[12, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> id(L)  # same list id, modified in place...
1772071032392

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM