关于Python:Python – 无法编写迭代或递归代码

Python - Can't code iteration or recursion

我有以下列表和一个起点:

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

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

例如,给定列表的长度未指定。

我试着写一个for函数,但是由于列表的长度不是常量,它不能给出正确的输出。

我的尝试:

1
2
3
4
5
6
7
8
9
  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)


你需要这样的东西:

1
2
3
4
5
6
7
8
9
10
11
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

我得到:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

用途:

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