如何在python中进行变异?通过重新排序原始列表

时间:2013-11-05 18:56:18

标签: python mutation

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]]

我该怎么办?

2 个答案:

答案 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)