【问题标题】:Compare position and elements of 3 different lists比较 3 个不同列表的位置和元素
【发布时间】:2020-02-21 10:03:31
【问题描述】:

我正在尝试比较 3 个不同列表的位置和元素,然后将它们保存在一个新列表中,如果相同位置的至少 2 个元素匹配。

例如:

a = [FF2, FF6, FC4]
b = [FB5, FB3, FC4]
c = [FF2, FB3, FM8]

Result = [FF2, FB3, FC4]

一开始我使用下面的代码来比较 2 个列表,并尝试通过在 for i1 之后添加一个额外的 for 循环并在我的 if 中添加一个或来调整它以适应 3 个列表,但结果大错特错(几乎是预期输出值的 10 倍)。

for i, v in enumerate(a):
    for i1, v1 in enumerate(b):
        if (i==i1) & (v==v1):
            Result.append(v)

这是我目前的方法,效果很好,但我不知道如何将匹配的值附加到我的 Result 列表中。

Result = list(x for x, (xa, xb, xc) in enumerate(zip(a, b, c))
     if xa == xb or xb == xc or xa == xc)

【问题讨论】:

    标签: python list for-loop list-comprehension


    【解决方案1】:
    al = ['FF2', 'FF6', 'FC4']
    bl = ['FB5', 'FB3', 'FC4']
    cl = ['FF2', 'FB3', 'FM8']
    
    res = []
    for a,b,c in zip(al, bl, cl):
        if a == b or b == c or c == a:
            if a == b:
                res.append(a)
            elif b == c:
                res.append(b)
            elif c == a:
                res.append(c)
    
    print(res)
    

    您可以同时遍历 3 个列表并附加到结果列表。使用zip()

    【讨论】:

      【解决方案2】:

      您可以通过取消使用enumerate() 而只使用zip 来避免遇到的问题。然后,我们检查zip 创建的每个元组中的每个唯一元素,并查看该元素的计数是否大于 1。如果是,我们将其附加到返回列表中。使用t.count() 解决了对不整洁的xa == xb or xb == xc or xa == xc 条件的需求,并使其可以轻松扩展到n 列表。

      代码:

      a = ['FF2', 'FF6', 'FC4']
      b = ['FB5', 'FB3', 'FC4']
      c = ['FF2', 'FB3', 'FM8']
      
      r = [x for t in zip(a, b, c) for x in set(t) if t.count(x) > 1]
      

      输出:

      >>> r
      ['FF2', 'FB3', 'FC4']
      

      【讨论】:

        【解决方案3】:

        你可以这样做,

        a = ["FF2", "FF6", "FC4"]
        b = ["FB5", "FB3", "FC4"]
        c = ["FF2", "FB3", "FM8"]
        
        result = []
        for idx in range(len(a)):
            if a[idx] == b[idx] or a[idx] == c[idx]:
                result.append(a[idx])
            elif b[idx] == c[idx]:
                result.append(b[idx])
            else:
                pass
        
        print(result)
        

        输出将是,

        ['FF2', 'FB3', 'FC4']
        

        【讨论】:

          猜你喜欢
          • 2019-03-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多