嘿我正在审查我周二参加的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。关于如何解决这个问题的任何想法?
答案 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']]