Python中如何计算两个列表的差值并将结果存入第三个列表?
解决列表元组数值差值计算的TypeError问题
你要计算两个包含元组的列表的对应数值差值,示例数据如下:
list_1 = [('M', 4000.0), ('R', 5320.0)] list_2 = [('M', 4222.0), ('R', 5442.0)]
你尝试的代码是:
list_3 = [] list_3.append([list_1] - [list_2]) print(list_3)
结果触发了TypeError:
TypeError: unsupported operand type(s) for -: 'list' and 'list'
错误原因
Python的列表类型不支持直接用-运算符做差值运算,你写的[list_1] - [list_2]是在尝试对两个列表执行减法,这属于非法操作,所以报错。
正确实现方式
方法1:循环遍历配对元素(适合列表元组顺序一致的情况)
list_1 = [('M', 4000.0), ('R', 5320.0)] list_2 = [('M', 4222.0), ('R', 5442.0)] list_3 = [] # 用zip把两个列表的对应元组配对 for item1, item2 in zip(list_1, list_2): # 可选:校验元组的标识是否一致 if item1[0] == item2[0]: # 计算数值差值,保留标识后存入list_3 diff_tuple = (item1[0], item2[1] - item1[1]) list_3.append(diff_tuple) print(list_3) # 输出: [('M', 222.0), ('R', 122.0)]
方法2:列表推导式(简洁版)
如果不需要额外校验,或者已经确认元组顺序和标识完全匹配,可以用一行列表推导式完成:
list_1 = [('M', 4000.0), ('R', 5320.0)] list_2 = [('M', 4222.0), ('R', 5442.0)] list_3 = [(item1[0], item2[1] - item1[1]) for item1, item2 in zip(list_1, list_2)] print(list_3)
方法3:转字典计算(适合元组顺序不一致的情况)
如果两个列表里的元组顺序可能不同,但标识(如'M'、'R')是一一对应的,转成字典更稳妥:
list_1 = [('M', 4000.0), ('R', 5320.0)] list_2 = [('M', 4222.0), ('R', 5442.0)] # 把列表转成字典,标识作为键,数值作为值 dict1 = dict(list_1) dict2 = dict(list_2) # 遍历字典键,计算对应差值后转回列表 list_3 = [(key, dict2[key] - dict1[key]) for key in dict1 if key in dict2] print(list_3)
内容的提问来源于stack exchange,提问作者Daniel Riley
相关产品推荐
相关产品推荐

