itertools Permutation: Gibt nur bestimmte Kombinationen zurück


Daniel

Ich möchte eine Funktion schreiben, die eine Liste (in diesem Fall die Namen der Ports) erstellt und alle möglichen Reihenfolgen dieser Ports ausgibt. Die Reihenfolge, in der die Permutationen gedruckt werden, spielt keine Rolle, aber sie sollten alle mit Panama (PAN) beginnen.

Bisher habe ich den Punkt erreicht, alle Permutationen auszudrucken, aber ich kann immer nicht nur die Kombinationen ausdrucken, die mit PAN beginnen. Irgendwelche Ideen, wie / wo ich meinen Code ändern kann?

import itertools

portnames = ["PAN", "AMS", "CAS", "NYC", "HEL"]
 
def permutations(route, ports):
    # write the recursive function here
    # remember to print out the route as the recursion ends
    sum = route + ports
    perms = list(itertools.permutations(sum))
    for perm in perms:
        output = []
        for item in perm:
            output.append(portnames[item])
        
        print(output)

# this will start the recursion with 0 as the first stop
permutations([0], list(range(1, len(portnames))))
Nick

Sie können den routeStartport ( in Ihrem Code) aus der Liste der Portnamen entfernen und dann alle Permutationen der verbleibenden Werte abrufen. Stellen Sie dann einfach den Startport vor jede dieser Permutationen:

import itertools

portnames = ["PAN", "AMS", "CAS", "NYC", "HEL"]
 
def permutations(route, ports):
    ports.remove(route)
    perms = itertools.permutations(ports)
    for perm in perms:
        output = [route] + list(perm)
        print(output)

# this will start the route with 'PAN' as the first stop
permutations('PAN', portnames)

Ausgabe:

['PAN', 'AMS', 'CAS', 'NYC', 'HEL']
['PAN', 'AMS', 'CAS', 'HEL', 'NYC']
['PAN', 'AMS', 'NYC', 'CAS', 'HEL']
['PAN', 'AMS', 'NYC', 'HEL', 'CAS']
['PAN', 'AMS', 'HEL', 'CAS', 'NYC']
['PAN', 'AMS', 'HEL', 'NYC', 'CAS']
['PAN', 'CAS', 'AMS', 'NYC', 'HEL']
['PAN', 'CAS', 'AMS', 'HEL', 'NYC']
['PAN', 'CAS', 'NYC', 'AMS', 'HEL']
['PAN', 'CAS', 'NYC', 'HEL', 'AMS']
['PAN', 'CAS', 'HEL', 'AMS', 'NYC']
['PAN', 'CAS', 'HEL', 'NYC', 'AMS']
['PAN', 'NYC', 'AMS', 'CAS', 'HEL']
['PAN', 'NYC', 'AMS', 'HEL', 'CAS']
['PAN', 'NYC', 'CAS', 'AMS', 'HEL']
['PAN', 'NYC', 'CAS', 'HEL', 'AMS']
['PAN', 'NYC', 'HEL', 'AMS', 'CAS']
['PAN', 'NYC', 'HEL', 'CAS', 'AMS']
['PAN', 'HEL', 'AMS', 'CAS', 'NYC']
['PAN', 'HEL', 'AMS', 'NYC', 'CAS']
['PAN', 'HEL', 'CAS', 'AMS', 'NYC']
['PAN', 'HEL', 'CAS', 'NYC', 'AMS']
['PAN', 'HEL', 'NYC', 'AMS', 'CAS']
['PAN', 'HEL', 'NYC', 'CAS', 'AMS']

Verwandte Artikel


aws-cli gibt nur bestimmte Felder zurück

edmamerto Angesichts dieses aws-cliBefehlsbeispiels aws rds describe-db-cluster-snapshots Ich gebe eine Liste von Objekten mit Feldern zurück. Ich möchte nur die Felder anzeigen: "SnapshotCreateTime"und"DBClusterIdentifier" Wie mache ich das? Adiii AWS CLI bi

PHP für jede Schleife gibt nur bestimmte Elemente zurück

Dynamite Medien Ich verwende eine API von Bittrex, lese den Json und laufe dann mit einer für jede Schleife durch, um die benötigten Informationen zu erhalten alles funktioniert richtig. und hier ist der code: foreach($return[result] as $x=>$x_value){

Permutation: Gibt die k-te Permutation zurück

Prakash N. Ich weiß, dass es hier zum Beispiel eine O(n)zeitliche Komplexitätslösung für dieses Problem gibt . Ich bin nur neugierig, warum mein naiver Ansatz O(2^n)in Python nicht funktioniert. Algorithmus: Ich finde die Permutationen nur rekursiv und wenn da