Python - Can't code iteration or recursion
我有以下列表和一个起点:
1 2 | lst = [[0, 1], [0, 4], [3, 4], [5, 1], [5, 2]] point = 3 |
我想编写一个函数,返回这个列表:
例如,给定列表的长度未指定。
我试着写一个
我的尝试:
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] |