如何在 Python 中将一个值与下一个值交换



例如,我有一个列表:[25,3,26,27,56] .

我想编写一个将数字 27 与下一个值交换的函数。在上面的示例中,在 27 和 56 之间交换位置。

但实际上我不知道列表中的值到底是什么。

所以我的问题是,如何表达"下一个价值"?我尝试使用索引,但我不知道如何表达它。而且,我知道如何用另一个数字替换一个数字,但是如何交换列表中的两个数字(数字 27 是已知的,将 27 与下一个值交换,但我不知道下一个值是什么)?

您可以像这样在一行中交换值

myList = [25,3,26,27,56]
myList[3], myList[4] = myList[4], myList[3]
print myList

输出

[25, 3, 26, 56, 27]

如果右侧的值用逗号分隔,python 会将它们视为元组,并将它们逐个解压缩到左侧变量中。在这种情况下,它选取 myList[4]myList[3] 的值,并分别将它们分配给myList[3]myList[4]

编辑:如果要交换每个连续的元素,可以执行此操作

myList = [25,3,26,27,56]
for i in range(0, len(myList) - 1, 2):
    myList[i], myList[i + 1] = myList[i + 1], myList[i]
print myList

输出

[3, 25, 27, 26, 56]

如果你特别想用下一个数字交换 27,可以使用index函数获取 27 的索引并像这样交换

myList = [25,3,26,27,56]
idx = myList.index(27)
if idx == len(myList) - 1: # If 27 is the last element, swap with the previous
    myList[idx], myList[idx - 1] = myList[idx - 1], myList[idx]
else:
    myList[idx], myList[idx + 1] = myList[idx + 1], myList[idx]
print myList

如果你想操作列表的一个块,切片分配是一个很好的方法

>>> foo = [25, 3, 26, 27, 56]
>>> i = foo.index(27)
>>> foo[i: i+2] = foo[i+2: i-1: -1]
>>> foo
[25, 3, 26, 56, 27]

您也可以使用

>>> foo[i: i+2] = reversed(foo[i: i+2])

>>> foo[i: i+2] = foo[i+1], foo[i]

最新更新