为什么需要嵌套if的范围(Len)?

2024-10-01 19:16:37 发布

您现在位置:Python中文网/ 问答频道 /正文

这是按原样工作的,但是当我没有range(len..)、do for i in arrfor j in arr时,我在if语句中得到IndexError: list index out of range。为什么会这样

arr = [2,2,2,2,4,5,2,45,3,4,4]

mostFrq = 0
mostFrqAmount = 0

for i in range(len(arr)):

        amountOfCurrent = 0

        # now look at temp element
        for j in range(len(arr)):
                if (arr[j] == arr[i]):
                        amountOfCurrent = amountOfCurrent + 1

        if (amountOfCurrent > mostFrqAmount):
                mostFrqAmount = amountOfCurrent
                mostFrq = arr[i]

print(mostFrq)
print(mostFrqAmount)

Tags: inforindexlenifrange语句do
3条回答

不知道你试过什么。这应该以同样的方式工作:

arr = [2,2,2,2,4,5,2,45,3,4,4]

mostFrq = 0
mostFrqAmount = 0

for i in arr:

        amountOfCurrent = 0

        # now look at temp element
        for j in arr:
                if (j == i):
                        amountOfCurrent = amountOfCurrent + 1

        if (amountOfCurrent > mostFrqAmount):
                mostFrqAmount = amountOfCurrent
                mostFrq = i

print(mostFrq)
print(mostFrqAmount)

当你迭代一个列表时,你会得到它的元素。因为您正在访问该元素索引处的列表元素,所以当它超出界限时,它将不起作用(而且无论如何也不会做您期望的事情)

相反,只需使用循环提供的项:

mostFrq = 0
mostFrqAmount = 0

for i in arr:
        amountOfCurrent = 0

        # now look at temp element
        for j in arr:
                if (j == i):
                        amountOfCurrent += 1

        if (amountOfCurrent > mostFrqAmount):
                mostFrqAmount = amountOfCurrent
                mostFrq = i

如果您以失败的形式分析代码的情况,您有:

arr = [2,2,2,2,4,5,2,45,3,4,4]

mostFrq = 0
mostFrqAmount = 0

for i in arr:

        amountOfCurrent = 0

        # now look at temp element
        for j in arr:
                if (arr[j] == arr[i]):
                        amountOfCurrent = amountOfCurrent + 1

        if (amountOfCurrent > mostFrqAmount):
                mostFrqAmount = amountOfCurrent
                mostFrq = arr[i]

print(mostFrq)
print(mostFrqAmount)

使用for i in arr表单返回一个迭代器,该迭代器为您处理索引信息,因此您的“i”被设置为数组中的值

当你走到这条线时: if (arr[j] == arr[i]):

最后用变量替换arr[45]

数组的索引只会变为10,因此会抛出错误

相关问题 更多 >

    热门问题