【问题标题】:Comparing two lists and making new list比较两个列表并制作新列表
【发布时间】:2021-05-18 18:37:51
【问题描述】:

假设我有两个列表 a=[1,2,3,4,5,6]b=[2,34,5,67,5,6] 我想创建第三个列表,其中包含 1 元素在 ab0 相同时不同,所以上面就像c=[1,1,1,1,0,0]

【问题讨论】:

  • 请从intro tour 重复on topichow to ask。 “告诉我如何解决这个编码问题”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后然后就您的算法或技术提出一个具体的问题。 Stack Overflow 并不打算取代现有的文档和教程。这是一个微不足道的迭代和比较——你应该能够生成有用的代码。

标签: python list compare


【解决方案1】:

您可以压缩列表并在列表理解中比较它们。这利用了布尔值在 python 中相当于 1 和 0 的事实:

a=[1,2,3,4,5,6]
b=[2,34,5,67,5,6] 

[int(m!=n) for m, n, in zip(a, b)]
# [1, 1, 1, 1, 0, 0]

【讨论】:

  • 希望,现在世界已经从 python 2.7 转移了,但请注意,由于列表推导在 python 2 和 3 之间具有不同的范围,这将破坏 a 和 b。
  • 感谢@RichL,这有点草率(即使没有考虑 2.7)——我编辑了它。
【解决方案2】:

尝试使用zip 对列表中每对项目的元素进行列表推导:

[ 0 if i == j else 1 for i,j in zip(a,b) ]

【讨论】:

    【解决方案3】:

    使用 for 循环进行迭代是一种选择,但列表解析可能更有效。

    a=[1,2,3,4,5,6]
    b=[2,34,5,67,5,6]
    c=[]
    for i in range(len(a)):
        if a[i] == b[i]:
            c.append(0)
        else:
            c.append(1)
    print(c)
    

    打印

    [1, 1, 1, 1, 0, 0]
    

    【讨论】:

      【解决方案4】:

      如果您将有多个向量操作并且它们应该很快。结帐numpy

      import numpy as np
      a=[1,2,3,4,5,6]
      b=[2,34,5,67,5,6]
      a = np.array(a)
      b = np.array(b)
      c = (a != b).astype(int)
      # array([1, 1, 1, 1, 0, 0])
      

      【讨论】:

        【解决方案5】:

        如果这正是您正在寻找的东西,但应该可行:

        edidt:刚刚发现 Joe Thor 比我早几分钟发表了几乎完全相同的评论 lmao

        a = [1, 2, 3, 4, 5, 6]
        b = [2, 34, 5, 67, 5, 6]
        results = []
        
        for f in range(0, len(a)):
            if a[f] == b[f]:
                results.append(0)
            else:
                results.append(1)
        
        print(results)
        

        【讨论】:

          【解决方案6】:

          这可以通过使用 for 循环相当简单地完成。它确实假设两个列表 a 和 b 的长度相同。示例代码如下所示:

          a = [1,2,3,4,5,6]
          b = [2,34,5,67,5,6]
          c = []
          if len(a) == len(b):
             for i in range(0,len(a)):
                 if(a[i] != b[i]):
                   c.append(1)
                 else:
                   c.append(0)
          

          这也可以使用列表推导来完成:

          a = [1,2,3,4,5,6]
          b = [2,34,5,67,5,6]
          c = []
          if len(a) == len(b):
              c = [int(i != j) for i,j in zip(a,b)]
          

          列表理解代码来自此线程:Comparing values in two lists in Python

          【讨论】:

            【解决方案7】:
            a = [1, 2, 3, 4, 5, 6]
            b = [2, 34, 5, 67, 5,6]
            c = []
            
            index = 0
            x = 1
            y = 0
            for i in range(len(a)):    # iterating loop from index 0 till the last 
                if a[index]!= b[index]:    # comapring each index 
                        c.append(x)         # if not equal append c with '1'
                        index += 1           # increment index to move to next index in both lists
                else:
                        c.append(y)
                        index += 1
            
            print(c)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2017-08-10
              • 1970-01-01
              • 1970-01-01
              • 2022-08-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-06-19
              相关资源
              最近更新 更多