0
votes

Python exécutant toutes les permutations de la liste des fonctions

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: xxx

je veux exécuter foo () , bar () , BAT () , foo () bar () , foo () bat () bar () BAT () , et < Code> FOO () BAT () BAT () .

Par conséquent, la liste résultante serait: [1, 2, 3, 3, 4, 5, 6] < /Code >.

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.

Merci pour toute aide que vous donnez.


0 commentaires

3 Réponses :


1
votes

Saviez-vous que vous pouviez stocker des fonctions dans des listes de Python?

Vous pouvez définir toutes vos fonctions d'abord: p> xxx pré>

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)


0 commentaires

0
votes

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))]


4 commentaires

Notez que le résultat de FOO () , bar () 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 de len (L) -1 . 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 :)



1
votes

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 : xxx

sortie: xxx


0 commentaires