如何对嵌套列表的子列表元素做差值计算并存储结果?
修正嵌套列表差值计算的代码问题
问题场景
现有嵌套列表lists_of_lists1,结构如下:
lists_of_lists1 = [ran_list1, ran_list2, ran_list3, ran_list4, ran_list5, ran_list6, ran_list7,ran_list8]
其中每个子列表(如ran_list1)包含多个仅含两个数值的子列表,示例:
[[34.39460533995712, 47.84539466004288], [33.095772478005635, 46.50422752199436], ...]
需求是对每个子列表中的第二个值减去第一个值(子列表[1] - 子列表[0]),将每个父级子列表的计算结果存入list_of_lists2对应的子列表中(如ran_subresult1存储ran_list1的计算结果)。
原代码的问题
你尝试的代码因索引逻辑错误无法实现功能:
for i in lists_of_lists1: for j in range(len(i)): list_of_lists2[j].append(lists_of_lists1[j][1] - lists_of_lists1[j][0])
错误点:
- 混淆循环变量与列表索引:
i是当前遍历的父级子列表,但内层循环用j去索引lists_of_lists1[j],取的是外层列表的第j个元素,而非当前i对应的子列表 - 未提前初始化
list_of_lists2的子列表,直接调用append会触发索引错误 - 差值计算对象错误,应该针对当前遍历的数值对子,而非外层列表的第j个元素
修正后的代码
方式1:分步循环(直观易读)
先初始化结果列表,再逐层遍历计算:
# 初始化结果嵌套列表 list_of_lists2 = [] # 遍历每个父级子列表 for parent_list in lists_of_lists1: sub_result = [] # 遍历子列表中的每对数值 for num_pair in parent_list: diff = num_pair[1] - num_pair[0] sub_result.append(diff) # 将当前父列表的结果存入外层结果列表 list_of_lists2.append(sub_result)
方式2:列表推导式(简洁高效)
利用Python列表推导式一行完成:
list_of_lists2 = [[pair[1] - pair[0] for pair in parent_list] for parent_list in lists_of_lists1]
验证结果
运行后list_of_lists2的第一个子列表list_of_lists2[0](对应ran_list1)会得到类似[13.45078932008576, 13.408455043988725, ...]的差值列表,符合预期需求。
内容的提问来源于stack exchange,提问作者Programming Noob
相关产品推荐
相关产品推荐

