Python嵌套列表计数函数问题:子列表统计与元素长度校验
解决嵌套列表统计与校验问题
问题分析
P1 非列表元素引发的报错
你遇到的list(map(len, n))报错,本质是传入的嵌套列表里混了非列表类型的不可调用len的元素(比如整数),或是函数逻辑里误将非子列表元素纳入了len的调用范围。单独测试时你可能用了纯子列表的列表,但实际函数接收的参数存在不符合预期的元素。
P2 子列表长度一致性校验
要校验所有子列表元素数量一致,核心是先提取所有有效子列表的长度,再判断这些长度是否完全相同。
完整实现代码
def nlc(nested_list): # 统计子列表数量:仅过滤类型为list的元素 sublist_count = sum(1 for item in nested_list if isinstance(item, list)) # 提取所有子列表的长度 sublist_lengths = [len(item) for item in nested_list if isinstance(item, list)] # 校验子列表长度是否一致 if not sublist_lengths: # 无任何子列表时,默认返回True(可根据需求调整) length_consistent = True else: # 检查所有长度是否与第一个子列表长度一致 length_consistent = all(length == sublist_lengths[0] for length in sublist_lengths) return sublist_count, length_consistent # 测试用例 nl1 = [[1,2,3], [4,5,6], [7,8,9]] nl2 = [[1,2], [3], [4,5,6], "not a list", 123] count1, consistent1 = nlc(nl1) print(f"nl1子列表数量:{count1},长度是否一致:{consistent1}") # 输出:nl1子列表数量:3,长度是否一致:True count2, consistent2 = nlc(nl2) print(f"nl2子列表数量:{count2},长度是否一致:{consistent2}") # 输出:nl2子列表数量:3,长度是否一致:False
关键细节补充
处理多层嵌套场景:
如果需要统计所有层级的子列表(比如子列表里还嵌套子列表),可以改用递归统计:def count_all_sublists(nested_list): count = 0 for item in nested_list: if isinstance(item, list): count += 1 + count_all_sublists(item) return count将该函数整合到
nlc中即可实现深层统计。边界情况处理:
代码里考虑了无任何子列表的场景,避免因sublist_lengths为空导致索引报错,可根据实际需求调整该场景的返回值。
内容的提问来源于stack exchange,提问作者Noob3000
相关产品推荐
相关产品推荐

