Python-改变列表中的两个值

2024-05-15 13:13:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我必须改变列表中的值,改变每个位置,就像在asserts中一样,我试图执行类似于此代码的操作,但是显示了assert错误。这是我第一次问,我使用搜索,但没有发现任何类似的问题。对不起我的英语。你知道吗


Tags: ornone列表lenreturnifdefassert
1条回答
网友
1楼 · 发布于 2024-05-15 13:13:24

我想你误解了or运算符。Python首先评估i1的真实性。如果为true(在您的例子中为非零),那么python将执行该块,而不必查看第二个条件。您真正想要的是第一个条件也检查索引对于列表是否有效。i、 e.应该是:

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

另外,在python中交换elments的一个常见习惯用法是:

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

相关问题 更多 >