Python如何实现两个嵌套列表对应第二个元素的减法运算
保险费用差值计算实现方案
前置说明
Python 变量名不允许包含空格,首先需要修正你的变量命名才能正常运行:
insurance_cost = [('Maria', 4150.0), ('Rohan', 5320.0), ('Valentina', 35210.0)] estimated_insurance_cost = [('Maria', 4222.0), ('Rohan', 5442.0), ('Valentina', 36368.0)]
实现方法
方法1:基础遍历法(适合新手理解)
如果两个列表的人名顺序完全对应,可以用zip()函数同时遍历两个列表,直接提取对应元组的第二个元素做差:
diff_result = [] # zip会自动配对两个列表相同位置的元素 for actual_item, estimate_item in zip(insurance_cost, estimated_insurance_cost): # 可选校验:确认人名匹配,避免顺序错位导致计算错误 if actual_item[0] == estimate_item[0]: diff = estimate_item[1] - actual_item[1] diff_result.append( (actual_item[0], diff) ) print(diff_result) # 输出结果:[('Maria', 72.0), ('Rohan', 122.0), ('Valentina', 1158.0)]
方法2:列表推导式(简洁写法)
熟悉基础语法后可以用一行代码完成计算:
diff_result = [ (a[0], b[1]-a[1]) for a,b in zip(insurance_cost, estimated_insurance_cost) if a[0]==b[0] ]
方法3:字典转换法(不依赖列表顺序)
如果无法保证两个列表的人名顺序一致,可以先转成字典再计算,更稳妥:
# 把列表转成{人名:费用}的字典 actual_dict = dict(insurance_cost) estimate_dict = dict(estimated_insurance_cost) # 按人名匹配计算差值 diff_dict = {name: estimate_dict[name] - actual_dict[name] for name in actual_dict} # 如需转回列表格式,用diff_result = list(diff_dict.items())
疑问解答
- 不需要转换为int类型:你提供的费用值都是float类型,Python原生支持float直接做减法运算,如果后续需要整数结果,可以用
int(差值)对结果做强制转换即可。 - 不需要手动unzip:
zip()函数已经自动完成了对应元素的配对,直接遍历就能拿到两组对应数据,操作更简单。
内容的提问来源于stack exchange,提问作者Prabhjoat Singh Riyat
相关产品推荐
相关产品推荐

