0

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

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

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

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

4

2 回答 2

5

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

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

输出

[25, 3, 26, 56, 27]

如果右侧的值用逗号分隔,python 将它们视为一个元组,并将它们一一解包到左侧变量。在这种情况下,它选择 and 的值myList[4]并将myList[3]它们分别分配给myList[3]and 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
于 2013-11-07T02:32:38.213 回答
2

如果您想操作列表的一部分,切片分配是一种很好的方法

>>> 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]
于 2013-11-07T02:44:15.963 回答