Codefights 是 python3 中的类似挑战

hus*_*fly 8 arrays set python-3.x

我在使用 python3 的 CodeFights 上遇到“areSimilar”问题。

提示指出“如果可以通过交换其中一个数组中最多一对元素来从另一个数组获得一个数组,则两个数组被称为相似数组。

给定两个数组 a 和 b,检查它们是否相似。”

例如,[1,1,2] 和 [1,2,1] 将通过测试,因为您可以交换任一列表中的两个元素以模拟另一个列表。

但是,[3,4,5] 和 [4,5,3] 未通过测试,因为您无法交换任一列表中的两个元素以使其看起来像另一个。

两个列表的长度始终相同并且长度大于 2。

我当前的代码通过了除一个隐藏测试之外的所有测试,我想知道是否有人可以指导我完成一个过程来帮助我解决这个问题。

谢谢!

小智 4

我的旧代码也未能通过最后一个隐藏测试,我意识到交换函数有一个问题我的旧交换函数是:

def swp(i,a,b):
    s = 0
    item = a[i]
    if item in b:
        indx = b.index(item)
        s = b[i]
        b[i] = b[indx]
        b[indx] = s
        return -1
    else:
        return -2
Run Code Online (Sandbox Code Playgroud)

认为如果:

a = [2,9,6,8,9,5]
b = [2,5,6,8,9,9]
Run Code Online (Sandbox Code Playgroud)

如果我将 5 与前 9 交换,它将不正确......

这是更改交换函数后的新代码

def swp(i,a,b):
        s = 0
        item = a[i]
        if item in b:
            for j in range(len(b)):
                if b[j] == a[i] and b[j] != a[j]:
                    indx = j
                    s = b[i]
                    b[i] = b[indx]
                    b[indx] = s
                    return -1
        else:
            return -2


    def check(a,b):
        for i in range(len(a)):
            if a[i] != b[i]:
                return i
        return -1

    def areSimilar(a, b):
        if check(a,b) != -1:
            i = check(a,b)
            if swp(i,a,b) == -1:
                swp(i,a,b)
                if check(a,b) != -1:
                    return False
            else:
                return False
        return True
Run Code Online (Sandbox Code Playgroud)