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]]
我该怎么办?
答案 0 :(得分: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]
答案 1 :(得分: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)