Python实现updatedQuestionMarkSum列表处理函数问题求助
Python列表处理需求实现与问题修复
第一部分:基础questionMarkSum函数实现
需求说明
编写名为questionMarkSum的函数,入参为列表,将列表中所有?替换为该问号之前所有出现过的数字之和,默认列表元素仅为数字或问号,函数返回更新后的列表。
示例
- 示例1:输入
[1, 2, 3, "?"],输出[1, 2, 3, 6] - 示例2:输入
[2, 1, "?", 5, 0, "?"],输出[2, 1, 3, 5, 0, 8]
已验证正确代码
def questionMarkSum(z): updated = [] subtotal = [] for entry in z: if entry == '?': subt = sum(subtotal) updated.append(subt) subtotal = [subt] # 本次计算的和计入后续求和 else: updated.append(entry) subtotal.append(entry) return updated # 测试用例 tests = [1, 2, 3, "?"], [2, 1, "?", 5, 0, "?"] for test in tests: print(questionMarkSum(test))
第二部分:升级版updatedQuestionMarkSum函数修复
修改要求
需在基础函数上做两处调整:
- 若列表中存在元素
x,所有索引大于x所在位置的元素均不更新,原样保留 - 若列表中出现数字10,同时满足以下两个条件:
- 10的前一个元素不是10
- 10所在位置存在下一个元素(不得新增列表长度)
则将下一个元素的值也设为10
对应示例
- 示例1:输入
[2, 1, "?", 5, "x", "?"],输出[2, 1, 3, 5, "x", "?"] - 示例2:输入
[2, 10, "?", 5, 0, "?"],输出[2, 10, 10, 5, 0, 27] - 示例3:输入
[2, 10],输出和原列表完全一致,不做修改
原有代码问题排查
- 遇到
x直接break,没有将x和后续元素追加到结果列表,导致返回列表长度缺失 - 完全未实现数字10的相关处理逻辑
- 函数名不符合要求
修复后代码
def updatedQuestionMarkSum(z): updated = [] subtotal = [] n = len(z) stop_process = False # 标记是否遇到x,停止处理逻辑 for i in range(n): current = z[i] # 已经遇到x,后续元素直接原样追加 if stop_process: updated.append(current) continue # 遇到x,标记停止处理,追加x后后续元素直接保留 if current == 'x': updated.append(current) stop_process = True continue # 处理10的逻辑:当前是10,前一个不是10,有下一个元素 if current == 10 and i > 0 and z[i-1] != 10 and i < n-1: # 修改下一个元素的值为10 z[i+1] = 10 # 原有问号替换逻辑 if current == '?': subt = sum(subtotal) updated.append(subt) subtotal = [subt] else: updated.append(current) subtotal.append(current) return updated # 测试用例 test_cases = [ [2, 1, "?", 5, "x", "?"], [2, 10, "?", 5, 0, "?"], [2, 10] ] for case in test_cases: # 传入副本避免修改原列表 print(updatedQuestionMarkSum(case.copy()))
代码运行输出
[2, 1, 3, 5, 'x', '?'] [2, 10, 10, 5, 0, 27] [2, 10]
完全匹配要求的示例结果。
内容的提问来源于stack exchange,提问作者Yasser Elfahli
相关产品推荐
相关产品推荐

