[英]Move elements in a list one position backward without mutating the original list
[英]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.