Python实现不等长列表对应元素相加并保留超长部分的问题求助
解决两个不等长列表对应位置相加的问题
先帮你揪出原代码里的几个关键小问题:
- 变量名拼写错误:开头定义的是
lis1,后续却用list1,会直接触发NameError - 循环内的
append逻辑错误:遍历过程中每次给短列表追加元素,会导致列表长度持续增加,完全无法实现对应位置的计算 - 判断条件写错:
if list2[i]=[]是赋值操作而非判断逻辑,且我们需要判断的是索引是否超出短列表范围,而非元素是否为空列表 - 字符混淆:把数字
0写成了字母o,会触发未定义变量的错误 - 未初始化
list3:直接对空列表赋值会报错
接下来给你两种实用的正确实现方式:
方法一:基础循环实现
先获取两个列表的最大长度,遍历每个索引,对应位置元素相加;超出短列表长度的部分,直接保留长列表的对应元素:
list1 = [1,2,3,4,5] # 长度5 list2 = [1,1,1,1,1,1,1] # 长度7 list3 = [] max_length = max(len(list1), len(list2)) for i in range(max_length): # 判断当前索引是否在两个列表的范围内 if i < len(list1) and i < len(list2): list3.append(list1[i] + list2[i]) elif i < len(list1): list3.append(list1[i]) else: list3.append(list2[i]) print(list3) # 输出:[2, 3, 4, 5, 6, 1, 1]
方法二:用itertools.zip_longest简化代码
Python标准库的itertools.zip_longest可以自动按最长列表对齐两个序列,缺少的位置用指定值填充(这里用0),再通过列表推导式完成求和,代码更简洁高效:
from itertools import zip_longest list1 = [1,2,3,4,5] list2 = [1,1,1,1,1,1,1] list3 = [a + b for a, b in zip_longest(list1, list2, fillvalue=0)] print(list3) # 输出:[2, 3, 4, 5, 6, 1, 1]
内容的提问来源于stack exchange,提问作者Satthew Seong Hun Moon
相关产品推荐
相关产品推荐

