Zum Beispiel
['Apple','Orange','Grape']
Aus der Liste von
[['Apple'], ['Orange'], ['Grape'], ['Apple', 'Orange'], ['Apple', 'Grape'], ['Orange', 'Grape'], ['Apple', 'Orange', 'Grape']]
Ich möchte die Ausgabe erhalten. Einige Kombinationen haben nur ein Element, und einige Kombinationen enthalten mehrere Elemente. Ich weiß, dass es eine Liste von 2 ^ n-1 Antworten ist, aber ich bin gestolpert, als ich tatsächlich versucht habe, sie zu schreiben. Wird es nicht ein kompliziertes Nest sein?
Ich habe eine Standardbibliothek gefunden, die in solchen Fällen verwendet werden kann. itertools --- Iterator-Generierungsfunktion für eine effiziente Schleifenausführung
Iterator | Streit | Ergebnis |
---|---|---|
combinations() | p,r | Taple-Spalte der Länge r, keine Vervielfältigung in sortierter Reihenfolge |
Zum Beispiel
test.py
import itertools
lis = [1,2,3,4]
for pair in itertools.combinations(lis, 2):
print(pair)
Wenn Sie die oben genannten Schritte ausführen, erhalten Sie die folgenden Ergebnisse:
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)
Ändern Sie vorerst das Argument und versuchen Sie es erneut.
test2.py
import itertools
lis = [1,2,3,4]
for team in itertools.combinations(lis, 3):
print(team)
(1, 2, 3)
(1, 2, 4)
(1, 3, 4)
(2, 3, 4)
Mit itertools.combinations () können Sie alle Kombinationsmuster (in Tapples) mit einer beliebigen Anzahl von Elementen in der ** Liste wie folgt abrufen. ** ** ** Wenn Sie hier mit der Anzahl der Elemente von 1 beginnen und diese mit einer for-Anweisung auf die Listenlänge umstellen, erhalten Sie anscheinend zuerst die gewünschte Antwort.
all_combinations.py
import itertools
lis=['Apple','Orange','Grape']
result = []
for n in range(1,len(lis)+1):
for conb in itertools.combinations(lis, n):
result.append(list(conb)) #Konvertieren Sie Taple in Listentyp
print(result)
Ausführungsergebnis
[['Apple'], ['Orange'], ['Grape'], ['Apple', 'Orange'], ['Apple', 'Grape'], ['Orange', 'Grape'], ['Apple', 'Orange', 'Grape']]
Wenn Sie itertools verwenden, scheint es mehr Situationen zu geben, in denen Sie keine Nester schreiben müssen, und es kann ein wesentlicher Punkt für Paiza- und Wettkampfprofis sein. Wie unter "Lesbarer Code" erwähnt, dachte ich, dass Sie guten Code schreiben können, wenn Sie es sich zur Gewohnheit machen, die Standardbibliothek regelmäßig zu lesen.
Es war eine Einführung in die Standardbibliothek, die ich nützlich fand!
Recommended Posts