信息技术来源: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']。
问题反馈
解析有疑问或显示异常?请先复制题目信息,再打开反馈表单填写。
题目编号:2026_05_G3_Z20_q010
