-1
def swap_numbers(x, x_index): 
    for num in x:
        if x_index < len(x)-1:
            x[:] = x[:x_index] + [x[x_index+1]] + [x[x_index]]+ x[x_index+2:]
        elif x_index == len(x)-1:
            x[:] = [x[-1]] + x[1:-1] + [x[0]]

因此,如果我想改变一个列表,可以说 x = [1,2,3,4,5] 和 x_index = 2 这个函数所做的就是将我们输入的索引号与以下数字交换。

它应该像

>>> x = [1,2,3,4,5]
>>> swap_numbers(x,2)
>>> x
[1,2,4,3,5]

但我的是

>>> x = [1,2,3,4,5]
>>> swap_numbers(x,2)
>>> x
[1,2,3,4,5]

但是,如果我制作功能的第一部分,它会起作用

x[:] = [x[:x_index] + [x[x_index+1]] + [x[x_index]] + x[x_index+2:]]"

然后它会变成

>>> x = [1,2,3,4,5]
>>> swap_numbers(x,2)
>>> x
[[1,2,4,3,5]]

我应该怎么办?

4

2 回答 2

1

也许是这样的:

def swap (l, i):
    l [i], l [i + 1] = l [i + 1], l [i]

这产生:

>>> def swap (l, i): l [i], l [i + 1] = l [i + 1], l [i]
... 
>>> a = [1, 2, 3, 4, 5]
>>> swap (a, 2)
>>> a
[1, 2, 4, 3, 5]
于 2013-11-05T19:10:05.250 回答
0

这取决于您要对索引错误(交换不存在)做什么,但这有效:

x = [1,2,3,4,5]
def swap_numbers(li, ind):
    try:
        li[ind],li[ind+1]=li[ind+1],li[ind]
    except IndexError:
        pass       

swap_numbers(x,2)
print x   
# [1, 2, 4, 3, 5]

这不会做任何不能做的事情,比如swap_numbers(x,5)

于 2013-11-05T19:11:21.117 回答