def all_pairs(lst):
    if len(lst) < 2:
        yield lst
return
a = lst[0]
for i in range(1, len(lst)):
    pair = a, lst[i]
for rest in all_pairs(lst[1:i] + lst[i + 1:]):
    yield [pair] + rest
Как разбить список на пары всеми возможными способами