2017-07-19 88 views
2

中的yield命令yield命令用於生成返回值。我想避免使用它,用迭代操作替換它。我該怎麼做?如何在下面的代碼中避免python代碼

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

這取決於如何發生器(三角)在代碼別處調用。你能發佈那部分代碼嗎? – perigon

+0

print(list(triangulations(tuple(「abcde」)))) – RamsesXVII

+0

首先,你應該看看這個輝煌的anwser,以確保你理解生成器:https://stackoverflow.com/questions/231767/what- do-the-yield-keyword-do-in-python – maestromusica

回答

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) 

更多說明:

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) 

輸出:

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

你願意解釋你的代碼嗎? –

+0

https://stackoverflow.com/a/231855/1408786請參閱此答案以獲取更多信息,這應解釋有關yield函數的所有內容。 – user1408786

+2

我知道什麼'產量'(並且據我所知,這不是一個函數)。基本上,代碼轉儲並不是一個好的答案,所以你應該解釋這個代碼的工作原理和原因。 –