如何在Python中统计嵌套列表元素数量并展平列表?
统计嵌套结构中的书籍总数
你遇到的reduce用法问题,根源是没有指定初始值:当author["languages"]只有一个元素时,reduce会直接返回该元素(单个language对象),转成list时就会把对象的键名["language", "books"]返回,而非预期的书籍列表。
下面是几种可行的替代方法:
方法1:修正reduce用法(指定初始值)
给reduce加上空列表作为初始值,确保每次迭代都是列表相加:
from functools import reduce author = authorList[0] all_books = reduce(lambda acc, lang: acc + lang["books"], author["languages"], []) total_books = len(all_books) # 结果为9
方法2:用生成器表达式直接求和(最简洁高效)
不需要展平整个书籍列表,直接累加每个语言下的书籍数量:
author = authorList[0] total_books = sum(len(lang["books"]) for lang in author["languages"])
方法3:用itertools.chain展平列表
适合需要保留完整书籍列表后续处理的场景:
from itertools import chain author = authorList[0] all_books = list(chain.from_iterable(lang["books"] for lang in author["languages"])) total_books = len(all_books)
内容的提问来源于stack exchange,提问作者Suule
相关产品推荐
相关产品推荐

