深耕专业教研,探索前沿技术
信息技术来源:Z20+名校联盟2026届高三第三次学情诊断

第 10 题

答案与解析

本题解析

参考答案

A

程序分析

i=0 ; j=len(s)-1
while i<=j:
    if s[j]=="#":
        j-=1
    elif s[i]=="#":
        s[i]=s[j]
        j-=1
    else:
        i+=1
print(s[:i])

i、j 分别从列表首尾开始移动。每轮先检查 s[j]:若为“#”,只将 j 左移,跳过右端的“#”;否则再检查 s[i],若为“#”,就用右端的非“#”元素覆盖它,并将 j 左移;若 s[i] 也不是“#”,才将 i 右移。因此,程序不断用右端的有效元素填补左侧空位,将非“#”元素集中到列表前部。

覆盖 s[i] 时并未同时增加 i,后续循环还会检查这个位置。循环在 i>j 时结束,s[:i] 取下标 0 到 i-1 的元素,右侧残留的旧值不会输出。

初始 i=0、j=9。右端 s[9] 为“#”,先跳过;左端的 p 保留。随后用 s[8] 的 n 覆盖 s[1] 的“#”,j 变为 7。

继续向右检查,n、y 均保留,再用 s[7] 的 o 覆盖 s[3] 的“#”,j 变为 6。此时 s[6] 也是“#”,将 j 减至 5。

接着 i 依次越过下标 3、4、5 的 o、t、h,变为 6。此时 i>j,输出 s[:6],即 ['p','n','y','o','t','h']。