如何获取两个列表对应位置最大值?代码返回空列表问题排查
问题分析与解决
错误原因
你的函数返回空列表有两个核心问题:
- 循环语法错误:
for i,j in range(len(a), len(b))完全不符合Python语法。range()只能生成单值序列,无法同时解包为i和j;且当len(a) > len(b)时(比如你的测试用例中len(a)=4,len(b)=3),range(4,3)会生成空序列,循环直接跳过。 - 未处理列表长度不一致的情况:如果两个列表长度不同,原逻辑没有考虑超出较短列表长度的元素如何处理。
修正方案
方案1:仅处理两个列表共同长度的部分
用zip()函数同时遍历两个列表的对应元素,这是最简洁的写法:
def ddh(a, b): v = [] for num_a, num_b in zip(a, b): v.append(num_a if num_a > num_b else num_b) return v a = [1,2,555,9999] b = [22,4,444] print(ddh(a, b)) # 输出: [22, 4, 555]
方案2:处理到最长列表的长度,超出部分直接取对应列表的元素
如果希望保留较长列表中超出的元素,可以先获取两个列表的最大长度,再逐个索引访问:
def ddh(a, b): v = [] max_len = max(len(a), len(b)) for i in range(max_len): num_a = a[i] if i < len(a) else float('-inf') num_b = b[i] if i < len(b) else float('-inf') v.append(max(num_a, num_b)) return v a = [1,2,555,9999] b = [22,4,444] print(ddh(a, b)) # 输出: [22, 4, 555, 9999]
简化写法
还可以用列表推导式进一步简化代码(方案1的简化版):
def ddh(a, b): return [max(x, y) for x, y in zip(a, b)]
内容的提问来源于stack exchange,提问作者efi banu
相关产品推荐
相关产品推荐

