Сравните положение и элементы 3 разных списков - PullRequest
2 голосов
/ 21 февраля 2020

Я пытаюсь сравнить положение и элементы 3 разных списков, чтобы затем сохранить их в новом списке, если хотя бы 2 элемента в той же позиции совпали.

Например:

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

Result = [FF2, FB3, FC4]

В начале я использовал следующий код для сравнения 2 списков и попытался адаптировать его для 3 списков, добавив дополнительный для l oop после for i1, а также добавив или к мой, если, но пошел ужасно неправильно (почти в 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)

Ответы [ 3 ]

2 голосов
/ 21 февраля 2020
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 голосов
/ 21 февраля 2020

Вы можете избежать проблем, устраняя использование 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']
1 голос
/ 21 февраля 2020

Вы можете сделать что-то вроде этого,

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']
...