Пересечение списков

Если даны два списка и необходимо найти их совпадающие элементы, то есть область пересечения списков - элементы, которые присутствуют в обоих списках, это можно сделать с помощью цикла for языка программирования Python.

Код ниже подходит для списков, содержащих неповторяющиеся значения в самих себе. Иначе в результирующем списке могут появиться одинаковые элементы.

a = [5, [1, 2], 2, 'r', 4, 'ee']
b = [4, 'we', 'ee', 3, [1, 2]]
c = []
for i in a:
    for j in b:
        if i == j:
            c.append(i)
            break
 
print(c)

Берется первый элемент первого списка (внешний цикл for) и последовательно сравнивается с каждым элементом второго списка (вложенный цикл for). В случае совпадения значений элемент добавляется в третий список c. Команда break служит для выхода из внутреннего цикла, так как в случае совпадения дальнейший поиск при данном значении i бессмыслен.

Если в самом списке могут встречаться одинаковые элементы, чтобы они не повторялись в результирующем списке, следует добавить проверку наличия такого элемента в третьем списке:

a = [5, [1, 2], 2, 'r', 4, 'ee', 'ee']
b = [4, 'we', 'ee', 3, [1, 2]]
c = []
for i in a:
    if i in c:
        continue
    for j in b:
        if i == j:
            c.append(i)
            break
 
print(c)

Результат выполнения программы:

[[1, 2], 4, 'ee']

Использование операций над множествами

Другой способ – это использование множеств. Подходит только для списков, которые не содержат вложенных списков, так как функция set() выдает ошибку, если ей передать список со вложенными изменяемыми объектами.

Множества не могут содержать одинаковых элементов. Результатом операции пересечения двух множеств является множество, содержащее значения элементов, которые были и в первом и во втором операндах-множествах. Например, если первое множество было {1, 4, 9, 12}, а второе – {4, 6, 9, 14, 18}, то результатом операции пересечения будет {4, 9}.

Списки преобразуются во множества с помощью функции set.

a = [5, 2, 'r', 4, 'ee']
b = [4, 1, 'we', 'ee', 2, 'r']
c = list(set(a) & set(b))
print(c)

При этом если в списках встречались одинаковые значения, то во множествах они будут уже представлены единственным вариантом. Поэтому в данном случае списки могут содержать одинаковые значения.

После того, как списки были преобразованы во множества, над ними можно выполнить операцию пересечения.

С помощью знака & выполняется пересечение множеств. Кроме того, над множествами можно выполнять ряд других операций: | (объединение), - (разность), ^ (исключающее ИЛИ).