Python Input-Parameter einer Funktion permutieren

Zerstoerer

Lieutenant
Registriert
Okt. 2010
Beiträge
685
Hallo zusammen,

für ein kleines Projekt müsste ich versuchen die Input-Parameter einer Funktion zu permutieren. Beispiel:

Python:
def g(a,b,c,d,e,f):
    #beliebiger Code

def main():
    g(a=1,b=1,c=1,d=0,e=0,f=1)
    g(a=1,b=1,c=1,d=0,f=1,e=0)
    g(a=1,b=1,c=1,f=1,d=0,e=0)
    # ... weitere Permutationen

Im Grunde will ich wie im Beispiel zu sehen, die Funktion g() jeweils mit allen Permutationen der Parameter aufrufen, und für jede Permutation jeweils verschiedene Werte eingeben.
Ich weiß, dass das Ergebnis von der Reihenfolge der Parameter nicht abhängt, allerdings kommt es mir auch nur auf die Reihenfolge dieser Ergebnisse an.
Kennt jemand zufällig eine Möglichkeit dies so umzusetzen?

Wäre dankbar für ein paar Tipps.
 
Zerstoerer schrieb:
Im Grunde will ich wie im Beispiel zu sehen, die Funktion g() jeweils mit allen Permutationen der Parameter aufrufen, und für jede Permutation jeweils verschiedene Werte eingeben.
Ich weiß, dass das Ergebnis von der Reihenfolge der Parameter nicht abhängt, allerdings kommt es mir auch nur auf die Reihenfolge dieser Ergebnisse an. Kennt jemand zufällig eine Möglichkeit dies so umzusetzen?
So richtig klar ist mir nicht, was Du eigentlich warum machen willst. In Perl kann ich Dir sofort sagen, wie das gemacht wird .
Perl:
use Algorithm::Combinatorics qw(:all);

sub g {
   my ($v1, $v2, $v3, $v4, $v5, $v6) = @_;
   print "$v1, $v2, $v3, $v4, $v5, $v6\n"
}

my @List = ( 0, 1 );
my $iter = variations_with_repetition(\@List, 6);
while (my $p = $iter->next) {
   g( @$p )
}
In Python muß ich erstmal nachlesen, vielleicht gibt es aber eine ähnlich benannte permutations/variations-funktion. Aber erklär doch bitte mal wozu das ganze dienen soll?

/edit: gibt's tatsächlich auch in Python:
Python:
import itertools

def g(v):
   v1, v2, v3, v4, v5, v6, nn = v          # nn ist immer Null
   print ('%d, %d, %d, %d, %d, %d' % (v1, v2, v3, v4, v5, v6))

def main():
   List = [0,1]
   iter = itertools.product(List, repeat=6+1) # warum 7?
   for p in iter:
      g(p)
      next(iter)
Ich bin eher ein Anfänger in Python und möglicherweise gibt's auch schönere Lösungen ...
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Zerstoerer
Das ganze soll dazu dienen Wahrheitstabellen zu erstellen. Eine Funktion g() gibt jeweils immer wahr zurück, wenn sie erfüllt ist. Dabei will ich die Spalten der Wahrheitstabelle permutieren und muss deshalb auch die Reihenfolge der Parameter immer wieder verändern.

Der Link von @new Account() konnte mir dabei sehr gut weiterhelfen und das Problem lösen. Danke an Alle.
 
Zurück
Oben