【问题标题】:Comparing two unknown list in Python比较 Python 中的两个未知列表
【发布时间】:2016-06-06 07:08:39
【问题描述】:

如何遍历两个具有未知数量的子列表和未知元素的未知列表。我要做的是比较它们,如果它们的长度相同,则返回 True;如果长度不同且特定索引中的元素类型不同,则返回 False

到目前为止我的代码:

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' 是一个字符串。

【问题讨论】:

    标签: python list if-statement return


    【解决方案1】:

    您可以使用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】:

      我可能会这样做:

      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 检查,但对于很多应用程序来说,它们是可以互换的。 . .

      【讨论】:

        【解决方案3】:

        如果您只处理列表(而不是元组),并且您希望严格控制类型比较,这应该可以工作:

        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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-03-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-02
          相关资源
          最近更新 更多