为什么在此代码中跳过了某些for循环迭代?

时间:2019-05-20 12:25:16

标签: python-3.x for-loop iteration

for循环的主体的执行多次被跳过。

我尝试运行此代码,但得到了意外的结果。我在调试时注意到,有时for循环的主体只是不执行。我检查了缩进错误,但看起来没问题。

    def getOutput (X):
        # Write your code here
        sum = 0
        if int(X) not in setA:
            setA.append(int(X))
            setA.sort()

        for a in range(len(setA)-1):

            if a == 0:
                low = 1
            else:
                low = setA[a-1] + 1
            sum += low

            if  a == (len(setA)-1):
                high = N
            else:
                high = setA[a+1] - 1
            sum += high
            #print(setA, a, low, high)

        return sum

N, M = map(int, input().split())
setA = []
while M > 0:
    X = input()
    out_ = getOutput(X)
    print (out_)
    M -= 1

Sample Input:
10 10
2 
7
5
9
6
1
8
10
3
4


Expected output for the above input:
11
20
30
46
58
61
77
96
102
110

1 个答案:

答案 0 :(得分:1)

for循环应为for a in range(len(setA)):

代替for a in range(len(setA)-1):

我尝试遍历列表中所有索引的循环。 range(len(setA)-1)排除列表最后一个元素的迭代。 这是因为范围函数默认情况下会排除最后一个元素。

例如:range(5)将给我们[0,1,2,3,4]。

因此无需在上面的代码中添加-1。