2017-07-19 1 views
2

im folgenden Code yield-Befehl wird verwendet, um zurückgegebene Werte zu generieren. Ich möchte es vermeiden, es durch Iterationsoperationen zu ersetzen. Wie kann ich es tun?So vermeiden Sie den yield-Befehl in Python-Code

def triangulations(p): 
    n = len(p) 
    if n == 2: 
     yield [] 
    elif n == 3: 
     yield [p] 
    else: 
     for k in range(1, n - 1): 
      for u, v in product(triangulations(p[:k + 1]), triangulations(p[k:])): 
       yield u + [(p[0], p[k], p[-1])] + v 

print(list(triangulations(tuple("abcde")))) 
+0

Es hängt davon ab, wie dieser Generator (Triangulation) im Code an anderer Stelle genannt wird. Können Sie diesen Teil des Codes posten? – perigon

+0

Drucken (Liste (Triangulations (Tuple ("Abcde")))) – RamsesXVII

+0

Zunächst sollten Sie sich diese brillante Anwser betrachten, um sicherzustellen, dass Sie Generatoren verstehen: https://stackoverflow.com/questions/231767/what- does-the-Yield-Schlüsselwort-Do-in-Python – maestromusica

Antwort

4
def triangulations(p): 
    result = [] 
    n = len(p) 
    if n == 2: 
     result.append([]) 
    elif n == 3: 
     result.append([p]) 
    else: 
     for k in range(1, n - 1): 
      for u, v in product(triangulations(p[:k + 1]), triangulations(p[k:])): 
       result.append(u + [(p[0], p[k], p[-1])] + v) 
    return result 

for i in triangulations([1, 2, 3]): 
    print(i) 

Weitere erklärt:

def triangulations(p): 
    result = [] 
    n = len(p) 
    print ("execute triangulations") 
    if n == 2: 
     result.append([]) 
    elif n == 3: 
     result.append([p]) 
    else: 
     for k in range(1, n - 1): 
      for u, v in product(triangulations(p[:k + 1]), triangulations(p[k:])): 
       result.append(u + [(p[0], p[k], p[-1])] + v) 
    return result 



triangulationsResult = triangulations([1, 2, 3]) 
for i in triangulationsResult: 
    print(i) 
for i in triangulationsResult: 
    print(i) 

def triangulationsYield(p): 
    n = len(p) 
    print ("execute triangulationsYield") 
    if n == 2: 
     yield [] 
    elif n == 3: 
     yield [p] 
    else: 
     for k in range(1, n - 1): 
      for u, v in product(triangulations(p[:k + 1]), triangulations(p[k:])): 
       yield u + [(p[0], p[k], p[-1])] + v 

triangulationsResultYield = triangulationsYield(["a", "b", "c"]) 
for i in triangulationsResultYield: 
    print(i) 
for i in triangulationsResultYield: 
    print(i) 

Ausgang:

execute triangulations 
[[1, 2, 3]] 
[[1, 2, 3]] 
execute triangulationsYield 
[['a', 'b', 'c']] 
+0

Möchten Sie Ihren Code erklären? –

+0

https://Stackoverflow.com/a/231855/1408786 Siehe diese Antwort für weitere Informationen, dies sollte alles über die Ertragsfunktion erklären. – user1408786

+2

Ich weiß, was "Ausbeute" (und soweit ich weiß, es ist keine Funktion). Grundsätzlich ist ein Code-Dump keine gute Antwort, also sollten Sie erklären, wie und warum dieser Code funktioniert. –

Verwandte Themen