Bonjour,
Savez-vous s'il est possible de réaliser un produit cartésien sur E1 x E2 x ... x En mais où n n'est pas fixé à l'avance à l'aide de la fonction product de itertools, sans la reprogrammer.
Merci d'avance,
Vincent
Version imprimable
Bonjour,
Savez-vous s'il est possible de réaliser un produit cartésien sur E1 x E2 x ... x En mais où n n'est pas fixé à l'avance à l'aide de la fonction product de itertools, sans la reprogrammer.
Merci d'avance,
Vincent
Bonsoir,
Si j'ai 2 ensembles, je fais :
Mais si j'ai une liste d'ensembles : L =[ [1,2,3], [4,5], ['a','b','c']], je ne vois pas comment faire, product(L) ne fonctionne pas.Code:
1
2
3
4
5 from itertools import product for cas in product([1,2,3], [4,5]) : print(cas)
Au pire, je l'ai reprogrammée :
Mais je me demandais si on pouvais faire cela facilement avec product.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 def produit(L) : l = len(L) indices = [0] * l while indices[0] < len(L[0]) : cas = [L[i][indices[i]] for i in range(l) ] print(cas) indices[-1] = indices[-1] + 1 j = -1 while j > -l and indices[j] == len(L[j]) : indices[j] = 0 j = j -1 indices[j] = indices[j] + 1
Merci,
Vincent
Salut,
Une fonction qui prends un nombre indéfini d'arguments positionnels (a0, a1, ....aN) a un prototype qui s'écrira *args.
Et lui passer en arguments les items d'une liste L = (a0, a1, ....aN) n'a rien avoir avec lui passer la liste qui faudra "unpacker". (*L)
- W
Bonsoir,
Mais c'est bien-sûr ! :) Grand merci, je me doutais que l'on ne pouvait pas faire avec ce genre d'appel... J'avais oublié la possibilité de "unpacker", que je n'utilise pas souvent.
C'est parfait, merci pour la réponse très rapide comme d'habitude. Cela va simplifier mon TD (même si le reprogrammer est intéressant).
Vincent