[英]How to manipulate a list with recursive function?
在您的示例中,发生了三种操作:
[2,5]
与 2 匹配,因此将[1,2,3]
的 2 替换为[2,[2,5]]
使列表变为[1,[2,[2,5]],3]
[6,3]
与 3 匹配,因此将[1,[2[2,5]],3]
替换为[3,[6,3]]
使列表变为[1,[2,[2,5]],[3,[6,3]]
[5,10]
与 5 匹配,然后在[2,5]
在该 5 旁边添加一个新条目[5,10]
,给出最终结果[[1,[2,[2,5,[10,5]]],[3,[6,3]]]]
对我来说,这里似乎存在不一致的行为,因为第三步遵循与其他两个不同的逻辑。 我会假设这是一个错误,第三步应该是:
[5,10]
与 5 匹配,因此将[2,5]
的 5 替换为[5,[10,5]]
,得到最终结果[[1,[2,[2,[5,[10,5]]]],[3,[6,3]]]]
您可以使用字典来记录每个数字第一次出现的位置,记录在哪个列表中找到它,以及在哪个索引处。 如果然后发现具有已经遇到的值的列表,则可以如上所述改变记录的列表。 如果没有匹配项(第一个列表[1,2,3]
就是这种情况),则该列表仅附加到结果中。
这是代码:
def solve(a):
dct = {}
result = []
for lst in a:
found = None
for i, val in enumerate(lst):
if val in dct:
found = val
else:
dct[val] = [lst, i]
if found is None:
result.append(lst)
else:
target, j = dct[found]
target[j] = [found, lst]
return result
# Example run:
a = [[1,2,3],[2,5],[6,3],[10,5]]
print(solve(a))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.