Python遍历嵌套列表生成可分组目标列表的实现方法求解
嵌套列表生成目标元组列表实现代码
以下是可直接运行的实现代码:
def is_nested(lst): # 判断当前列表是否为嵌套列表(包含子列表元素) return any(isinstance(i, list) for i in lst) def flatten(lst): # 扁平化任意深度嵌套列表 res = [] for item in lst: if isinstance(item, list): res.extend(flatten(item)) else: res.append(item) return res def gen_prefix_tuples(lst): # 生成非嵌套列表的所有前缀元组 return [tuple(lst[:i]) for i in range(1, len(lst)+1)] if __name__ == "__main__": lst1 = [['sg'], ['sci'], ['op1', 'op2', 'op3'], ['pop1', 'pop2', 'pop3'], ['pn'], [['on'], ['pcat1', 'pcat2', 'pcat3'], ['oci']]] result = [] # 提取主元素,初始化第一个元组 main_val = lst1[0][0] result.append((main_val,)) # 遍历lst1从第二个元素开始的所有项 for item in lst1[1:]: if is_nested(item): # 嵌套列表先走规则4:先拼接全量扁平化元组 full_flat = tuple(flatten(item)) result.append((main_val,) + full_flat) # 再遍历子列表走规则2、3 for sub_item in item: for prefix in gen_prefix_tuples(sub_item): result.append((main_val,) + prefix) else: # 非嵌套列表直接走规则2、3 for prefix in gen_prefix_tuples(item): result.append((main_val,) + prefix) # 输出结果验证 print(result)
运行代码后输出结果与需求要求完全一致:
[('sg',), ('sg', 'sci'), ('sg', 'op1'), ('sg', 'op1', 'op2'), ('sg', 'op1', 'op2', 'op3'), ('sg', 'pop1'), ('sg', 'pop1', 'pop2'), ('sg', 'pop1', 'pop2', 'pop3'), ('sg', 'pn'), ('sg', 'on', 'pcat1', 'pcat2', 'pcat3', 'oci'), ('sg', 'on'), ('sg', 'pcat1'), ('sg', 'pcat1', 'pcat2'), ('sg', 'pcat1', 'pcat2', 'pcat3'), ('sg', 'oci')]
内容的提问来源于stack exchange,提问作者Him Singhvi
相关产品推荐
相关产品推荐

