如何使用未知数量的子列表和未知元素遍历两个未知列表。我要做的是比较它们并返回True
如果它们的长度相同,False
如果长度不同而且特定索引中的元素类型不同。{/ p>
到目前为止我的代码:
def similarList(list1,list2):
if len(list1)!=len(list2):
return False
else:
if len(list1)>1 and len(list2)>1:
这是我不确定如何比较list1
和list2
的每个元素的地方。
示例:
similarList([0],[4])
真
similarList([3.9],[8])
假
similarList([[4,5,6],4] , [[2,3,4],'a'])
错误,因为4
是一个整数,'a'
是一个字符串。
答案 0 :(得分:1)
我可能会这样做:
def similarList(list1, list2):
if len(list1) != len(list2):
return False
return all(isinstance(a, type(b)) for a, b in zip(list1, list2))
isinstance(a, type(b))
位可能会根据您的使用情况稍微调整一下。例如如果你想断言他们是完全相同的类型,type(a) is type(b)
会更合适。如果您不知道哪个是子类,那么isinstance(a, type(b)) or isinstance(b, type(a))
可能就是您想要的。
仅供参考:"相同类型"存在一定程度的歧义。标准 - 例如考虑'foo'
和u'foo'
。它们不是同一类型。他们甚至没有通过我上面概述的最宽松的isinstance
支票,但对于很多应用来说,它们是可以互换的。 。
答案 1 :(得分:0)
您可以使用type
和递归再次检查lists
:
def similarList(list1,list2):
if len(list1)!=len(list2):
return False
else:
for item1, item2 in zip(list1, list2):
if type(item1) != type(item2):
return False
elif isinstance((item1, item2), list):
return similarList(item1,item2)
return True
答案 2 :(得分:0)
如果您只处理列表(不是元组),并且您希望对类型比较严格要求,这应该有效:
def similar_list(list1, list2):
if not isinstance(list1, list) or not isinstance(list2, list):
return False
if len(list1) != len(list2):
return False
for a, b in zip(list1, list2):
if isinstance(a, list):
if not similar_list(a, b):
return False
if type(a) is not type(b):
return False
return True