Python如何对元组内任意数量列表的对应元素求和与拼接
实现方案
错误原因说明
- 用
zip(*tuples)的写法只能处理元组内固定2个子列表的场景,子列表数量不固定时,zip解包后的元素数量和接收变量数不匹配就会触发值错误,无法适配动态长度的元组。 - 调用sum时出现
TypeError: 'list' object is not callable,是因为之前代码中把sum作为变量名赋值了列表类型的值,覆盖了Python内置的sum()函数,把同名自定义变量改成其他名称(比如total、num_sum)即可修复。切记不要使用Python内置函数名(比如sum、list、dict等)作为自定义变量名,否则会覆盖内置函数的引用,触发各类调用错误。
适配任意子列表数量的代码
普通循环写法(逻辑直观易调试)
不需要依赖zip做固定长度解包,遍历每个元组时初始化聚合初始值,逐个子列表累加拼接即可,天然支持元组内任意数量的子列表:
lst = [(['a', 1], ['b', 2]), (['c', 3], ['d', 4], ['e', 5])] res = [] for t in lst: s_concat = "" n_sum = 0 for sub in t: s_concat += sub[0] n_sum += sub[1] res.append([s_concat, n_sum]) # 输出结果 for item in res: print(item)
简洁推导式写法
用生成器表达式分别做字符串拼接和数值求和,代码更短:
lst = [(['a', 1], ['b', 2]), (['c', 3], ['d', 4], ['e', 5])] res = [[''.join(s[0] for s in t), sum(s[1] for s in t)] for t in lst] # 输出结果 for item in res: print(item)
两段代码运行后都会输出预期结果:
['ab', 3] ['cde', 12]
内容的提问来源于stack exchange,提问作者Rlyeh
相关产品推荐
相关产品推荐

