J'ai cette fonction g()
mon but est de produire un résultat similaire à product()
mais avec un nombre d'apparence contraint pour chaque groupe de caractères. Donc, dans le code ci-dessous au lieu de faire product(a, repeat=3)
g()
est censé donner toutes les combinaisons où les caractères de a
apparaissent 2 fois et les caractères de b
apparaissent 1 fois. Voici ce que j'ai:Comment aplatir le rendement lors de la production d'un générateur?
from itertools import permutations, product
a='ABC'
b=['*', '%3A']
l=[a]*2+[b]
def g(list):
for p in permutations(list):
yield product(*p)
result=g(l)
Le problème que je suis face est que lorsque je yield
le résultat que je suis un itérateur imbriqué qui est pénible à utiliser et quand je l'utilise retourner retourne juste le générateur correspondant à seulement le premier tour de boucle, comme si je l'ai fait: g()
seulement composé de def g(): return product(*next(permutations(list)))
.
Pensez à ce que vous feriez si vous étiez pas en train d'écrire un générateur 'g', et que vous vouliez juste appelle 'some_function (x)' sur chaque combinaison. Ecrivez ce code, puis remplacez 'some_function' par' yield'. – user2357112
Quelle version de python ciblez-vous (en vous demandant si 'yield from' pourrait être utilisé ici)? – snakecharmerb
@snakecharmerb python 3, oh oui tu as raison il y a 'rendement de' j'ai totalement oublié, j'ai résolu le problème en utilisant 'c = chaîne (c, produit (* p))' et en revenant c à la fin, avait le idée juste après l'affichage de cela. – ChiseledAbs