我有这个清单和一个起点如下:
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)
答案 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]