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 条评论

  • @ 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:11

      rana酱啊,有可能,我是说有可能,这程序12行pop()了之后len(a[i])会减小,可能就会越界;range里面的变量被污染了确实容易出这的那的问题(

      • 1

      信息

      ID
      451
      时间
      1000ms
      内存
      256MiB
      难度
      10
      标签
      递交数
      6
      已通过
      4
      上传者