【问题标题】:Checking if each values in list are identical to another list one by one. (Python 3)逐一检查列表中的每个值是否与另一个列表相同。 (Python 3)
【发布时间】:2021-10-06 22:44:57
【问题描述】:

例如,我们有 2 个列表:

list_1 = [12, 3, 45, 2, 50]
list_2 = [6, 3, 30, 5, 50]

如我们所见,两个列表中有 2 个相同的值。我目前正在尝试找出一个代码来检查列表中的每个值,如果两者按顺序相同,它将返回 False 或 True。 (检查每个列表的第一个值是否相同。在这种情况下,他们首先检查 12 和 6 是否相同,并且由于它们不相同,它将返回 False。他们检查下一个,如果 3 和3 是相同的,因为相同,所以它们会返回 True。)

如果有人愿意帮助我,那就太好了。

【问题讨论】:

    标签: python python-3.x list for-loop boolean


    【解决方案1】:

    我们可以使用 for 循环来实现这一点。 (我知道这种方法是老派,你可以通过使用 map() 和 all() 函数使用单线实现同样的目的)

    我先写完整的代码。然后我会解释每个步骤。

    (我假设列表将具有相同数量的元素。)

    代码:-

    list_1 = [12, 3, 45, 2, 50]
    list_2 = [12, 3, 45, 2, 50]
    
    length = len(list_1)                    # STEP 1
    
    
    for i in range(0, length):              # STEP 2
        if list_1[i] != list_2[i]:
            print(False)
        else:
            print(True)
    

    第 1 步

    确定列表的长度。这可以通过len() 函数来完成。 len(list_1) 将返回 list_1 的长度

    第 2 步

    遍历第一个列表中的每个元素,并将其与第二个列表中的相应元素进行比较。如果它们不同,则打印 False 或打印 True

    for i in range(0, length):
        if list_1[i] != list_2[i]:
            print(False)
        else:
            print(True)
    

    【讨论】:

      【解决方案2】:

      手动检查和比较列表中每个值的手动方法。 list_1 = [12, 3, 45, 2, 50] list_2 = [6, 3, 30, 5, 50]

      if(len(list_1) == len(list_1)):
          for i in range(0,len(list_1)):
              print(list_1[i] == list_2[i])
      else:
          print(False) #note that If this line is executed we will get only one output  
      

      这是结果: 错误的 真的 错误的 错误的 是的

      (已编辑)

      【讨论】:

      • 不需要内部条件。可能只是print(list_1[i] == list_2[i])
      • 绝对!谢谢尼尔。这将使代码更高效
      【解决方案3】:

      您可以使用all + zip() 然后您可以将它们与== 进行比较。

      来自docs

      all(iterable): 如果可迭代对象的所有元素都为真(或可迭代对象为空),则返回 True。

      zip(*iterables); 创建一个迭代器,聚合来自每个可迭代对象的元素。

      list_1 = [12, 3, 45, 2, 50]
      list_2 = [6, 3, 30, 5, 50]
      
      def check_lists(l1,l2):
          return all(x==y for x,y in zip(l1,l2))
      
      print (check_lists(list_1,list_2))
      

      或者,您可以直接比较它们

      print(list_1==list_2)
      

      【讨论】:

        【解决方案4】:

        在这种情况下,他们首先检查 12 和 6 是否相同,因为它们不相同,所以它会返回 False。他们检查下一个,如果 3 和 3 相同,并且由于相同,他们将返回 True。

        您可以使用itertools.zip_longest 来迭代多个序列,并一次拥有它们的第 n 个项目,例如在您的列表中将是 12 和 6,然后是 3 和 3,然后是 45 和 30,依此类推。

        • 这也可以处理列表长度不同的情况。
        from itertools import zip_longest
        
        list_1 = [12, 3, 45, 2, 50]
        list_2 = [6, 3, 30, 5, 50]
        
        result = [
            value_1 == value_2
            for value_1, value_2 in zip_longest(list_1, list_2)
        ]
        print(result)
        

        输出:

        [False, True, False, False, True]
        

        在这里,您可以看到(从 1 开始的编号)第 2 项(值为 3)和第 5 项(值为 50)是相同的,因此只有 True

        【讨论】:

          猜你喜欢
          • 2020-11-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多