因此,给定一些如下数据,其中该功能代表[id, name,age,parent 1 id,parent 2 id]
。
[[0,'john',12,3,4],[1,'rachel',25,3,4],[2,'carol',10,1,5], [3, 'maggie',40,,], [4,'peter',50,,],[5,'mike',30,,]
我将如何查找彼得拥有的后代数量?所以应该是3,因为雷切尔,约翰和卡罗尔是后代。
在python中解决此问题的最佳方法是什么。我当时在想树数据结构,但对于如何实现它感到困惑。
我的方法是按如下方式使用哈希图:
hmap = {}
for i in range(1,len(data)):
for j in range(1,len(data)):
if data[i][0] == data[j][3] or data[i][0] == data[j][4]:
if data[i][1] in hmap:
hmap[data[i][1]] +=1
else:
hmap[data[i][1]] =1
print(data[i][1], data[j][1])
但这只会给孩子们带来帮助。然后,我需要添加孩子的孩子。
任何指导将不胜感激。
答案 0 :(得分:1)
理想情况下,我建议使用单独的SQL表,将is_checked
作为布尔值,并进行长时间的迭代。
不过,您可以尝试使用双重list
结构,即list_id_to_check
和list_id_checked:
def find_descendants(parent_id, persons):
list_id_to_check = [parent_id]
list_id_checked = []
list_descendant_ids = []
while True:
if not list_id_to_check:
break
for id_to_check in list_id_to_check:
for person in persons:
if id_to_check in person[-2:]:
if person[0] not in list_descendant_ids:
list_descendant_ids.append(person[0])
if person[0] not in list_id_checked and person[0] not in list_id_to_check:
list_id_to_check.append(person[0])
list_id_to_check.remove(id_to_check)
list_id_checked.append(id_to_check)
continue
return list_descendant_ids