Исходя из моего понимания функции пересечения, он находит полное перекрытие между элементами в списке. Например:
tup_1 = [(1,2,3),(4,5,6)]
tup_2 = [(4,5,6)]
ol_tup = set(tup_1).intersection(tup_2)
print ol_tup
даст:
set([(4, 5, 6)])
Однако предположим, что мой список кортежей настроен так:
tup_1 = [(1,2,3),(4,5,5)]
tup_2 = [(4,5,6)]
Где есть перекрытие в 2 элементах 2-го кортежа в tup_1 и 1-го кортежа в tup_2. Если я хочу, чтобы Python вернул эти 2 кортежа: (4,5,5) и (4,5,6), есть ли более простой способ, чем этот вложенный цикл (ниже)?
for single_tuple_1 in tup_1:
for single_tuple_2 in tup_2:
if single_tuple_1[0] == single_tuple_2[0] and single_tuple_1[1] == single_tuple_2[1]:
print single_tuple_1,single_tuple_2
РЕДАКТИРОВАТЬ:
Для этого случая предположим, что порядок имеет значение, и предположим, что кортежи содержат 5 элементов:
tup_1 = [(1,2,3,4,5),(4,5,6,7,8),(11,12,13,14,15)]
tup_2 = [(1,2,3,4,8),(4,5,1,7,8),(11,12,13,14,-5)]
И я хотел бы найти кортежи, которые пересекаются друг с другом в их соответствующих первых 4 элементах. Таким образом, результат должен быть:
[(1,2,3,4,5),(1,2,3,4,8),(11,12,13,14,15),(11,12,13,14,-5)]
Как изменился бы код, чтобы приспособиться к этому?