Ich habe einen Generator, und ich möchte eine verschachtelte Schleife so ausführen, dass die innere Schleife an der Stelle beginnt, an der die äußere Schleife gerade steht. Zum Beispiel habe ich einen Generator, der die Liste [1,2,3]
erzeugt, und meine Schleife sollte produzieren: (1,2),(1,3),(2,3)
. Der Code, den ich herauskommen, ist der folgende:Klonen eines Generators für ein kartesisches Produkt ohne Duplikate
from itertools import tee
def my_gen():
my_list = [1, 2, 3]
for x in my_list:
yield x
first_it = my_gen()
while True:
try:
a = next(first_it)
first_it, second_it = tee(first_it)
for b in second_it:
print(a,b)
except StopIteration:
break
Dieser Code umständlich ist, nicht effizient und sieht nicht sehr pythonic mir. Bitte beachten Sie, dass ich combinations_with_replacement
nicht verwenden kann, da ich eine innere Schleife für die Verarbeitung eines bestimmten Werts aus der äußeren Schleife benötige.
Irgendwelche Vorschläge für einen eleganteren und pythonischen Code?
Mögliches Duplikat [Python: Rückkehr einzigartig nur kartesisches Produkts einer Liste mit Listen] (https://stackoverflow.com/questions/19946195/ Python-Return-Unique-Only-Cartesian-Produkt-einer-Liste-enthält-Listen) –