Python - 无法编写迭代或递归代码

时间:2013-12-28 21:53:50

标签: python recursion iteration

我有这个清单和一个起点如下:

lst = [[0, 1], [0, 4], [3, 4], [5, 1], [5, 2]]
point = 3 

我想写一个函数给我这个列表作为回报:[3,4,0,1,5,2]。它取起点,找到包含起点的对,并将其另一半作为新起点。

给定列表是一个示例,未指定列表的长度。

我试着写一个for函数,但由于列表的长度不是常数,所以它没有给出正确的输出

我尝试了什么:

  def func(start,lst):
      for i in range(len(lst)):
          if lst[i][1]==start:
              cont==lst[i][0]
              lst2=lst.remove(lst[i])
          if lst[i][0]==start:
              cont==lst[i][1]
              lst2=lst.remove(lst[i])
      func(cont,lst2)

2 个答案:

答案 0 :(得分:0)

这个怎么样(不使用递归):

def func(lst, start):
    result = []
    while True:
        found = False
        for item in lst:
            if start in item:
                item.remove(start)
                result.append(start)
                found = True
                if item:
                    start = item[0]
                    item.remove(start)
                    break
        if not found:
            result.append(start)
            break
    return result

用法:

>>> func([[0, 1], [0, 4], [3, 4], [5, 1], [5, 2]], 3)
[3, 4, 0, 1, 5, 2]

答案 1 :(得分:0)

您需要以下内容:

def func(start, lst, out=None):
    if out is None: # create new output list on first call
        out = []
    out.append(start) # add the starting value
    if len(lst) == 0: # base case
        return out
    for i in range(len(lst)):
        if start in lst[i]: # find the node
            item = lst.pop(i) # remove the node
            next_ = item[0] if item[1] == start else item[1] # get next 'start'
            return func(next_, lst, out) # recurse

我明白了:

>>> func(3, [[0, 1], [0, 4], [3, 4], [5, 1], [5, 2]])
[3, 4, 0, 1, 5, 2]