Python 递归或itertool而不是for循环
我构造了一个函数,用于为可以有父对象的Python 递归或itertool而不是for循环,python,django,Python,Django,我构造了一个函数,用于为可以有父对象的组,获取给定组的所有后代 现在我使用进行循环,如何提高效率 我的代码是这样的 def get_group_last111(group): groupmap = services_models.GroupMapping.objects.filter(parent_id=group) group_list = [group.id] for each in groupmap: group_li
组
,获取给定组的所有后代
现在我使用进行循环,如何提高效率
我的代码是这样的
def get_group_last111(group):
groupmap = services_models.GroupMapping.objects.filter(parent_id=group)
group_list = [group.id]
for each in groupmap:
group_list.append(each.group_id)
groupmaploop = services_models.GroupMapping.objects.filter(parent_id=each.group_id)
if groupmaploop.exists():
for each_data in groupmaploop:
group_list.append(each_data.group_id)
groupmaploop1= services_models.GroupMapping.objects.filter(parent_id=each_data.group_id)
if groupmaploop1.exists():
for each_data1 in groupmaploop1:
group_list.append(each_data1.group_id)
groupmaploop3= services_models.GroupMapping.objects.filter(parent_id=each_data1.group_id)
if groupmaploop3.exists():
for each_data2 in groupmaploop1:
group_list.append(each_data2.group_id)
groupmaploop4= services_models.GroupMapping.objects.filter(parent_id=each_data2.group_id)
if groupmaploop4.exists():
for each_data5 in groupmaploop4:
group_list.append(each_data5.group_id)
print set(group_list)
return set(group_list)
我可以使用itertool或递归函数更有效地执行此操作。请帮助我如果我理解正确,您需要给定组
对象的所有子体。所以孩子,孙子,曾孙等等
我们可以通过查询关系的深度来实现这一点,如:
def get_group_last111(group):
result = {group.id}
cur = result
while cur:
cur = set(
GroupMapping.objects.filter(parent_id__in=cur)
.values_list('group_id', flat=True)
)
result.update(cur)
return result
如果从给定的组
产生了四代,那么这将需要四次查询。因此,我们不会在Python中循环“家族树”,而是使用查询获取所有组。您能先解释一下您想要什么吗?不是你想要的吗?我想用递归函数代替循环中的循环。不,我是说你想要什么结果。例如:“所有group_id
s满足“this”条件。看起来这可以在一次(或者2-3次)查询中重写,这将使其速度更快。我想要所有的group_id。实际上它对我有效。但效率不高。但在这里,您(在代码中)将自己限制为五代人。