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

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

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

a = [5,[1,2],2,'r',4,'ee']
b = [4,1,'we','ee',2,'r',[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 бессмысленный.

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

Другой, возможно более интересный, способ – это использование множеств.

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

Поскольку даны списки, то их можно преобразовать во множества с помощью функции set.

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

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

Если проверить тип данных, на которые ссылаются переменные a и b до использования функции set, то они, очевидно, будут типом list. После преобразования – уже типом set. Это можно проверить с помощью функции type.

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

c = a & b

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

Переменная c будет содержать только уникальные значения элементов, однако будет множеством. Требуется же получить список. Для этого можно использовать функцию list, выполняющую создание списка.

c = list(c)

Все вышесказанное можно записать короче:

c = list(set(a) & set(b))

Создано