比较Python中的两个未知列表

时间:2016-02-24 06:14:02

标签: python list if-statement return

如何使用未知数量的子列表和未知元素遍历两个未知列表。我要做的是比较它们并返回True如果它们的长度相同,False如果长度不同而且特定索引中的元素类型不同。{/ p>

到目前为止我的代码:

def similarList(list1,list2):
    if len(list1)!=len(list2):
        return False
    else:
        if len(list1)>1 and len(list2)>1:

这是我不确定如何比较list1list2的每个元素的地方。

示例:

similarList([0],[4])

similarList([3.9],[8])

similarList([[4,5,6],4] , [[2,3,4],'a'])

错误,因为4是一个整数,'a'是一个字符串。

3 个答案:

答案 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