Python - 更改列表中的两个值

时间:2013-10-15 23:17:10

标签: python list

def troca_valor(lista, i1, i2):
    a = lista[:]
    tam = len(lista)
    if i1 or i2 > tam:
        return None
    else:
        a[i1] = lista[i2]
        a[i2] = lista[i1]
        return a

assert troca_valor([0,1,2,3],2,0) == [2,1,0,3]
assert troca_valor(["a", "e", "i", "o", "u"],1,3) == ["a", "o", "i","e", "u"]
assert troca_valor([0,1,2,3],7,3) == None
assert troca_valor([0,1,2,3],2,5) == None

我必须更改列表中的值,每次更改一个位置,就像在断言中一样,我正在尝试执行类似此代码的操作但显示断言错误。这是我的第一个问题,我使用搜索,但没有任何类似的问题。抱歉我的英文。

1 个答案:

答案 0 :(得分:1)

我认为你误解了or运营商。 Python首先评估i1的真实性。如果它是真的(在你的情况下,非零),那么python执行该块而不会查看第二个条件。你真正想要的是第一个条件,也检查索引是否对列表有效。即它应该是:

if i1 > tam or i2 > tam:
   ...

另外,另外,在python中交换元素的常用习惯是:

a, b = b, a

因此,代码的工作版本可能如下所示:

def troca_valor(lista, i1, i2):
    a = lista[:]
    tam = len(lista)
    if i1 > tam or i2 > tam:
        return None
    else:
        a[i1], a[i2] = lista[i2], lista[i1]
        return a

assert troca_valor([0,1,2,3],2,0) == [2,1,0,3]
assert troca_valor(["a", "e", "i", "o", "u"],1,3) == ["a", "o", "i","e", "u"]
assert troca_valor([0,1,2,3],7,3) == None
assert troca_valor([0,1,2,3],2,5) == None