1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
| def loop_root_node_list(self, root_node_list, rgroup_nodes, subgroup_num_range):
'''
Embed the finded subgroup layer in the node list tree --> embeded_node_list
'''
global iteration_count
# Debug
print(f'root_node_list: {root_node_list}\n\
iterate number: {iteration_count}')
iteration_count += 1
if root_node_list is None:
return [], rgroup_nodes
if len(root_node_list) == 0:
raise ValueError(f'No R group list was found!\n\
root_nodelist: {root_node_list}\n\
rgroup_nodes: {rgroup_nodes}')
elif isinstance(root_node_list[0], tuple): # just a node list, have not subgroup
# 递归的,第一项,也是返回条件
embeded_node_list = [] # [[nodeA, [subgroup_node_1, subgroup_node_2, ...]], ...]
empty_subgroup_count = 0
for root_node in root_node_list:
if len(rgroup_nodes) != 0:
subgroup_list, rgroup_nodes = self.make_subgroup_list(root_node, rgroup_nodes, subgroup_num_range)
else:
subgroup_list = [] # there is no node any more, so it has no subgroup.
if subgroup_list == []:
empty_subgroup_count += 1
embeded_node_list.append([root_node, subgroup_list])
if empty_subgroup_count == len(root_node_list): # ==== to stop the Recursion iteration, 末项
return embeded_node_list, rgroup_nodes
else: # 起始项
embeded_node_list, rgroup_nodes = self.loop_root_node_list(embeded_node_list, rgroup_nodes, subgroup_num_range)
return embeded_node_list, rgroup_nodes
elif isinstance(root_node_list[0], list): # element is list which used to represent subgroup_list
# 递归的,第n 项与第n+1项之间的关系
for i in range(len(root_node_list)):
if root_node_list[i][1] == []:
continue
if len(rgroup_nodes) == 0: # there is sub group, so no need to find any more. Don't need change.
break
subgroup_list = root_node_list[i][1]
root_node_list[i][1], rgroup_nodes = self.loop_root_node_list(root_node_list[i][1], rgroup_nodes, subgroup_num_range)
return root_node_list, rgroup_nodes
else:
raise Exception
|