2016-12-20 1 views
0

Ich versuche, eine if-Anweisung zu machen, aber ich erkannte, dass ich die Zeichenfolge mit den Wörtern in jeder möglichen Anordnung testen muss. also wie könnte ich das tun?Wie teste ich eine Zeichenfolge mit Wörtern in jeder Reihenfolge

hier ist mein Code

string = ("red blue black") 

if string == "red blue black": 
    print("cool") 
+0

Mögliches Duplikat von [So generieren Sie alle Permutationen einer Liste in Python] (http://stackoverflow.com/questions/104420/how-to-generate-all-permutations-of-a-list-in-python) – mkrieger1

Antwort

0

Wenn ich es richtig, Ihr Ziel zu verstehen, Sie wollen eine if Anweisung erstellen, die alle Anordnungen Ihrer string Variable erstellt, dann testen, ob Ihr „string“ in jeder von denen ist Vereinbarungen.

Alle Anordnungen einer Liste würden die „Permutationen“, so dass Sie Permutation von itertools module verwenden können:

import itertools 

string = ("red blue black") 

all_arrangements = list(itertools.permutations(string.split())) 

if string in [' '.join(i) for i in all_arrangements]: 
    print "cool" 

Da die Regelung auf der Grundlage String generiert werden, können Sie Ihre erwarten, wenn Aussage zufrieden sein und "cool" wird immer gedruckt, es sei denn, Sie ändern die Logik der if-Anweisung weiter.

Um besser zu erklären, was oben im Code los ist, können Sie den oben if Anweisungsblock mit dem folgenden Code ersetzen könnten, und bestätigen Sie die Anordnung Ihrer Zeichenfolge entspricht:

print "checking for ", string 

for arrangement in all_arrangements: 
    if string == ' '.join(arrangement): 
     print arrangement , "cool" 
    else: 
     print arrangement 

Ausgabe:

checking for red blue black 
('red', 'blue', 'black') cool 
('red', 'black', 'blue') 
('blue', 'red', 'black') 
('blue', 'black', 'red') 
('black', 'red', 'blue') 
('black', 'blue', 'red') 

Hoffe das hilft.

+0

IIRC 'string' ist kein Schlüsselwort/eingebaut, während' str' eingebaut ist. – moogle

+0

Diese Antwort ist perfekt, danke! –

+0

@moogle, guter Fang, ich habe es übertrieben! Ich werde das bearbeiten .. – davedwards

Verwandte Themen