You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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函数修复

修改要求

需在基础函数上做两处调整:

  1. 若列表中存在元素x,所有索引大于x所在位置的元素均不更新,原样保留
  2. 若列表中出现数字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],输出和原列表完全一致,不做修改

原有代码问题排查

  1. 遇到x直接break,没有将x和后续元素追加到结果列表,导致返回列表长度缺失
  2. 完全未实现数字10的相关处理逻辑
  3. 函数名不符合要求

修复后代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:54:05