Мне кажется, самое простое решение - создать словарь, в котором:
- ключи - первые элементы в кортежах
- значения - это списки, объединяющие все вторые элементы из кортежей
Получив это, мы можем построить список вывода:
from collections import defaultdict
def merge(pairs):
mapping = defaultdict(list)
for k, v in pairs:
mapping[k].append(v)
return [(k, *v) for k, v in mapping.items()]
pairs = [('a', 'b'), ('a', 'c'),('d','f')]
print(merge(pairs))
Это выводит:
[('a', 'b', 'c'), ('d', 'f')]
Это решение находится в O (n) , поскольку мы повторяем только два раза для каждого элемента из pairs
.