Функция для прохождения по списку списков и поиска аналогов
Есть список, содержащий некоторое количество элементов - списков.
Списки внутри состоят из двух элементов – целых чисел, которые обозначают id товаров
- (например,
[[1102, 214], [214, 2007], [42, 315], [406, 2007], …]).
Каждая пара внутри – пара аналогов товаров. Считаем, что если товар 1 и товар 2 - аналоги (1102 и 214), товар 2 и товар 3 – аналоги (214, 2007), то и товар 1 является аналогом товара 3 (1102 аналог 2007), даже если этой пары нет в исходном списке. Товар 1, товар 2 и товар 3 назовем группой аналогов. Необходимо написать функцию на Python, которая на вход принимает список списков и выводит на экран наиболее полные группы аналогов в виде кортежей (комментарии к коду приветствуются).
Пример: имеется список:
lst = [[1102, 214], [214, 2007], [42, 315], [406, 2007], [100, 200], [315, 77]]
Ожидаемый вывод:
1102, 214, 2007, 406
42, 315, 77
100, 200
Пробовал пройти по списку циклом, но не очень понимаю как обращаться отдельно к индексам внутри списка, как логично построить условие. Буду рад любому дельному совету.
Ответы (1 шт):
Спасибо за ссылку. Завернул одно из решений в функцию:
def analog(l):
out = []
while len(l)>0:
first, *rest = l
first = set(first)
lf = -1
while len(first)>lf:
lf = len(first)
rest2 = []
for r in rest:
if len(first.intersection(set(r)))>0:
first |= set(r)
else:
rest2.append(r)
rest = rest2
out.append(first)
l = rest
# print(out)
print('\n'.join(map(str, out)))
Вывод:
{214, 2007, 406, 1102}
{42, 315, 77}
{200, 100}
None