Étant donné une liste comme suit:

[(1, 2), (3, 4, 5), (6,)]

Je sais qu'il est très facile de combiner la liste des tuples en utilisant itertools.

(1, 3, 6), (1, 4, 6), (1, 5, 6), (2, 3, 6), (2, 4, 6), (2, 5, 6)

Mais comment puis-je le résoudre sans utiliser itertools?

-3
marshallslee 2 juin 2020 à 04:30

2 réponses

Meilleure réponse

Voici une approche assez générique avec une série de boucles sur l'entrée:

lst = [(1, 2), (3, 4, 5), (6,)]

result = [tuple([l]) for l in lst[0]]
for l in lst[1:]:
    out = []
    for r in result:
        for i in range(len(l)):
            out.append((*r, l[i]))
    result = out

print(result)

Production:

[(1, 3, 6), (1, 4, 6), (1, 5, 6), (2, 3, 6), (2, 4, 6), (2, 5, 6)]
1
Nick 2 juin 2020 à 02:04
def product(pools):
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    return result

product([(1,2,3),(4,5),(6,)])
[[1, 4, 6], [1, 5, 6], [2, 4, 6], [2, 5, 6], [3, 4, 6], [3, 5, 6]]
0
Onyambu 2 juin 2020 à 02:16