47 Stimmen

Der pythonische Weg zur Erzeugung von Paaren

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)

56voto

Sven Marnach Punkte 525472

Dabei handelt es sich nicht wirklich um "Kombinationen" im Sinne der Kombinatorik, sondern um Elemente aus dem kartesischen Produkt von a y b . Die Funktion in der Standardbibliothek zur Erzeugung dieser Paare lautet itertools.product() :

for i, j in itertools.product(a, b):
    # whatever

54voto

Rob Punkte 487

Wie @Sven sagte, versucht Ihr Code, alle geordneten Paare von Elementen der Listen zu erhalten a y b . In diesem Fall itertools.product(a,b) ist das, was Sie wollen. Wenn Sie stattdessen "Kombinationen" wollen, die alle ungeordneten Paare verschiedener Elemente der Liste sind a dann wollen Sie itertools.combinations(a,2) .

>>> for pair in itertools.combinations([1,2,3,4],2):
...    print pair
...
(1, 2)
(1, 3)
(1, 4)
(2, 3)
(2, 4)
(3, 4)

8voto

mhyfritz Punkte 8070

Ein verschachtelter Generatorausdruck funktioniert ebenfalls:

product = ((i, j) for i in a for j in b)
for i, j in product:
    # ...

7voto

Håvard Punkte 9528

En itertools Bibliothek verfügt über Kombinatorikfunktionen. Wie Sven sagte, itertools.product wäre in diesem Fall die geeignete Funktion:

list(itertools.product('ab', 'cd'))
[('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd')]

5voto

fransua Punkte 1527
>>>a=[1,2,3]
>>>b=[4,5,6]
>>>zip(a,b)
[(1, 4), (2, 5), (3, 6)]

CodeJaeger.com

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.

Powered by:

X