首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在python3中对抗areSimilar挑战

在python3中对抗areSimilar挑战
EN

Stack Overflow用户
提问于 2017-06-25 08:27:53
回答 9查看 3.1K关注 0票数 4

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

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

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

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

但是,3,4,5和4,5,3不能通过测试,因为您不能交换列表中的两个元素来使其看起来像另一个列表。

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

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

谢谢!

EN

回答 9

Stack Overflow用户

发布于 2017-11-08 06:02:08

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

代码语言:javascript
复制
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

想一下,如果:

代码语言:javascript
复制
a = [2,9,6,8,9,5]
b = [2,5,6,8,9,9]

如果我把5换成前9,那就不对了…

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

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2018-12-04 18:30:44

代码语言:javascript
复制
def areSimilar(a, b):
i = 0
i_val = []
while i < len(a):
    if a[i] != b[i]:
        i_val.append(i)
    i += 1
if not i_val:
    return True
if len(i_val) != 2:
    return False
return a[i_val[0]] == b[i_val[1]] and a[i_val[1]] == b[i_val[0]]

通过了所有的测试。

票数 3
EN

Stack Overflow用户

发布于 2018-06-24 08:07:37

你可以试试这段代码。我通过了所有的案子。

代码语言:javascript
复制
def areSimilar(a, b):
    count = 0
    list_a = []
    list_b = []
    for i in range(len(a)):
        if (a[i]!= b[i]):
            count +=1
            list_a.append(a[i])
            list_b.append(b[i])

    if (count ==0):
        return True 

    elif count ==2: 
        return set(list_a)==set(list_b)

    else:
        return False
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44742127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档