比较3个不同列表的位置和元素

2024-09-24 20:27:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如:

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

Result = [FF2, FB3, FC4]

开始时,我使用下面的代码比较了2个列表,并尝试将其调整为3个列表,在for i1之后添加了一个额外的for循环,还向if添加了一个or,但出现了可怕的错误(几乎是预期输出值的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)

Tags: orin元素列表forifresultxc
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']

您可以通过取消使用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']
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()

相关问题 更多 >