- 【例69.3】 字符串中的空格
下标问题
- @ 2025-6-20 11:56:41
n=int(input())
a=[[]]*n
for i in range(n):
a[i]=list(input())
sum=0
print(a)
for i in range(n):
for j in range(len(a[i])):
if a[i][j]==' ':
a[i].pop(j)
sum+=1
print(sum)
for i in range(n):
print(a[i])
Traceback (most recent call last): File "/w/foo.py", line 11, in IndexError: list index out of range
求大佬解答11行这里为什么下标会超出范围
2 条评论
-
240101460028 LV 8 @ 2025-7-16 15:48:02把for改成while吧。
如果是for,那么一开始就产生了序列range(n)和range(len(a[i])),后面a[i].pop(j)的时候len(a[i])实际上已经变小了,但是j遍历的range序列已经确定不会变化,所以会越界。
改成while的话,每一次循环都会判断一次,这时a[i]的长度可以在判断时更新。
我只改for和while不管别的:
n=int(input()) a=[[]]*n for i in range(n): a[i]=list(input()) sum=0 print(a) i = j = 0 while i < n: while j < len(a[i]): if a[i][j]==' ': a[i].pop(j) sum+=1 else: j += 1 i += 1 print(sum) for i in range(n): print(a[i])你也可以想想更简单的方法。我提供一个思路:
n = int(input()) count = 0 l = [''] * n for i in range(n): s = input() for c in s: if c != ' ': l[i] += c else: count += 1 print(count) for i in l: print(i) -
@ 2025-7-11 10:52:11rana酱啊,有可能,我是说有可能,这程序12行pop()了之后len(a[i])会减小,可能就会越界;range里面的变量被污染了确实容易出这的那的问题(
- 1
信息
- ID
- 451
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 6
- 已通过
- 4
- 上传者