2017-11-11 61 views
0

嘿,我正在为星期二为Python课程进行的考试进行评估,我试图制作一个程序来检查2个列表,看它们是否具有相同的项目/值,但顺序不同。为什么我的比较程序无法正常工作?

这是我到目前为止有:

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

,直到你已经检查列表1中的所有元素 – Himanshu

+1

你会uncoditionally返回TRUE;或'FALSE'外循环的第一个迭代你不应该返回true。花一些时间来学习如何使用调试器来遍历代码,因为这会使它比通过阅读代码更加明显。 –

+0

这就是因为它返回第一个值'1'本身的功能并没有完成删除返回True并粘贴在最后 –

回答

0

我认为这将做在OPS文章中,我们因为在列表中返回值True列表和检查都比较1验证其真实性和return True它不检查的下一个值7等和功能不继续执行该列表元素的休息,因为的return True语句,以便去除,并在两个循环的结束将将确保检查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])) 
的所有条件后,

OUTPUT

False 

我宁愿排序两个列表,然后检查作为复杂性相应的元件将减少到O(N * logn)时间,因为这代码显然是O(N 2)

+0

我看不到你已经改变了原来的功能,并且你没有提供关于你所做的改变的解释。 – roganjosh

+0

即时对不起,上述请再次检查 –

+0

感谢这结束了工作 –

0

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

def reOrder(list1,list2): 
Found = False 
if len(list1)!=len(list2): 
    return False 
for e in list2: 
    if e not in list1: 
     return False 
return True  
print(reOrder([1,7,10,8,4,2], [3,1,8,10,2,4])) 
相关问题