Je cherche à exécuter toutes les permutations d'une liste de fonctions, à la fois partielle et complète, et ajoutez les résultats et mettez-les dans une liste.
Par exemple, disons que j'ai trois fonctions: je veux exécuter Par conséquent, la liste résultante serait: Idée Comment je pourrais appeler toutes ces fonctions? En réalité, j'aurai environ 50 fonctions et je voudrais enregistrer toutes les combinaisons de toutes les fonctions. P> Merci pour toute aide que vous donnez. P> p> foo () code>,
bar () code>,
BAT () code>,
foo () bar () code>,
foo () bat () code>
bar () BAT () code>, et < Code> FOO () BAT () BAT () CODE>. P>
[1, 2, 3, 3, 4, 5, 6] < /Code >.
3 Réponses :
Saviez-vous que vous pouviez stocker des fonctions dans des listes de Python?
Vous pouvez définir toutes vos fonctions d'abord: p> puis, créez une liste pour contenir tout d'entre eux: P> from itertools import combinations
res_list = []
for i in range(len(list_of_functions)):
comb_list = list(combinations(list_of_functions, i+1))
for combination in comb_list:
x = sum(e() for e in combination)
res_list.append(x)
print(res_list)
ultérieurement Modifier:
from itertools import chain, combinations l = [foo, bar, bat] [sum(j() for j in z) for z in chain.from_iterable(([y for y in x] for x in combinations(l, r)) for r in range(1,len(l)+1))]
Notez que le résultat de FOO () code>,
bar () code> et
bat (code> est uniquement calculé une fois - cela peut ne pas être le résultat souhaite Si ces fonctions ne renvoient pas toujours la même valeur sur chaque appel.
@Grismar merci pour l'observation! Je suis allé sur la autre chose appelée Funcs Parce qu'il a dit avoir eu 50 funcs .. mais a eu votre point et inclus dans la réponse.
Une autre erreur est une autre erreur dans votre code, cela ne fonctionne que pour une liste de fonctions de longueur 3, car vous ne demandez que des combinaisons avec un R code> de
len (L) -1 code>. Essayez simplement d'exécuter votre solution avec 4 ou 2 fonctions.
Une autre? Qui était le premier? J'ai également remarqué que votre réponse est la "Surcommique" comme vous l'avez mentionnée, dans une compréhension de la liste :)
Je suppose que vous voudriez que les fonctions soient appelées à nouveau pour chaque somme calculée, c'est-à-dire ne pas calculer les résultats de la fonction une seule fois, puis calculer les sommes de leurs résultats.
Cela me semble être l'approche la plus propre : p> sortie: p>