Ich möchte etwas wie Code unten, aber "Python" Stil oder mit Standard-Bibliothek:
def combinations(a,b):
for i in a:
for j in b:
yield(i,j)
Ich möchte etwas wie Code unten, aber "Python" Stil oder mit Standard-Bibliothek:
def combinations(a,b):
for i in a:
for j in b:
yield(i,j)
Eine Frage, die wir uns stellen könnten, ist, ob Sie alle geordneten Paare oder alle ungeordneten Paare erzeugen wollen. Der verschachtelte Generatorausdruck, der in der Antwort von mhyfritz angegeben wurde, liefert alle geordneten Paare.
Wenn Sie alle ungeordnet Paare (d. h. (1, 2) und (2, 1) gelten als dasselbe Paar), dann müssen Sie die Duplikate herausfiltern. Eine einfache Möglichkeit, dies zu tun, ist das Hinzufügen einer Bedingung am Ende des Generatorausdrucks wie folgt:
myList= [1, 2, 3, 4, 5]
unorderedPairGenerator = ((x, y) for x in myList for y in myList if y > x)
for pair in unorderedPairGenerator:
print(pair)
#(1, 2)
#(1, 3)
#(1, 4)
#(1, 5)
#(2, 3)
#(2, 4)
#(2, 5)
#(3, 4)
#(3, 5)
#(4, 5)
Nebenbei bemerkt, wurde mir in einem Software-Interview eine ähnliche Frage gestellt, bei der ich alle Paare aus einer Liste von Zahlen generieren sollte (ohne eine Bibliotheksfunktion zu verwenden). Zuerst habe ich alle geordneten Paare erzeugt, und dann wurde ich gebeten, nur die ungeordneten Paare zu erzeugen. Die Fähigkeit, mit Permutationen und Kombinationen zu arbeiten, ist eine ziemlich wichtige Programmierfertigkeit!
Erstellen einer Menge von Paaren (gerade, ungerade) Kombination
>>> a = { (i,j) for i in range(0,10,2) for j in range(1,10,2)}
>>> a
{(4, 7), (6, 9), (0, 7), (2, 1), (8, 9), (0, 3), (2, 5), (8, 5), (4, 9), (6, 7), (2, 9), (8, 1), (6, 3), (4, 1), (4, 5), (0, 5), (2, 3), (8, 7), (6, 5), (0, 1), (2, 7), (8, 3), (6, 1), (4, 3), (0, 9)}
def combinations(lista, listb):
return { (i,j) for i in lista for j in listb }
>>> combinations([1,3,5,6],[11,21,133,134,443])
{(1, 21), (5, 133), (5, 11), (5, 134), (6, 11), (6, 134), (1, 443), (3, 11), (6, 21), (3, 21), (1, 133), (1, 134), (5, 21), (3, 134), (5, 443), (6, 443), (1, 11), (3, 443), (6, 133), (3, 133)}
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.