为什么我的比较程序不起作用?

时间:2017-11-11 02:52:25

标签: python

嘿我正在审查我周二参加的Python考试,我正在尝试制作一个程序来检查2个列表,看看它们是否都有相同的项目/值,只是顺序不同。 / p>

这是我到目前为止所做的:

def reOrder(list1, list2):
    if len(list1) != len(list2):
        return False
    for element1 in list1:
        foundElement = False
        for element2 in list2:
            if element1 == element2:
                foundElement = True
        if foundElement == False:
            return False
        else:
            return True


print(reOrder([1,7,10,8,4,2], [3,1,8,10,2,4]))

出于某种原因,它仍会在上述声明中打印出True。关于如何解决这个问题的任何想法?

2 个答案:

答案 0 :(得分:0)

我认为这样做会在OP帖子中我们返回值True因为在列表中比较列表中的1并且检查验证了它的真实性而return True它没有检查下一个值7,依此类推,由于return True语句,函数不会继续执行list元素的其余部分,因此删除它并放置在两个循环的末尾将确保在检查完所有条件之后,True案例作为结果返回

def reOrder(list1, list2):
    if len(list1) != len(list2):
        return False
    for element1 in list1:
        foundElement = False
        for element2 in list2:
            if element1 ==element2:
                foundElement=True
        if foundElement ==False:
            return False    
    return True
print(reOrder([1,3,10,8,4,2], [3,1,8,10,2,4]))

输出

False

我更喜欢对两个列表进行排序,然后检查相应的元素,因为复杂性会降低到O(n * logn),因为这段代码显然是o(n2)

答案 1 :(得分:0)

基本思想是,如果两个列表具有相同的元素,则第二个列表的每个元素应该在第一个列表中,反之亦然。意思是如果list2中的一个元素不在list1中,则两个列表不同。

board = []
for i in range(5):
  board.append(['0']*5)
print board

[['0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0']]