2017-07-19 123 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

我知道什么'产量'(并且据我所知,这不是一个函数)。基本上,代码转储并不是一个好的答案,所以你应该解释这个代码的工作原理和原因。 –