【问题标题】:Python - List index out of range, "for" loopPython - 列表索引超出范围,“for”循环
【发布时间】:2020-07-23 17:51:40
【问题描述】:

我不明白迭代列表元素的“for”循环如何超出范围。 第一部分似乎还可以,因为我可以打印它。

import random

def random_list(n):
    l = []
    for i in range(0,n):
        l.append(random.randint(0,n))

    return l


def maximum(n):
    x = 0
    b = random_list(n)
    for i in b:
        if b[i] > x:
            x = b[i]


print (maximum(10))

【问题讨论】:

  • 请包含错误信息。 Python 向您显示了错误所在的行,不分享似乎有点粗鲁!

标签: python for-loop


【解决方案1】:

考虑到你知道如何在 python 中迭代一个列表,错误可能是由于randint,它在区间 [low, high] 中生成一个整数。这意味着high 是一个可能的输出,而您程序中的最高索引是high - 1

例如,

random.randint(0, 0)

0

同样,random.randint(10) 可以返回 10

如果您不了解如何在 Python 中迭代列表,请考虑一个简单的示例:

以下列表:

myList = [1, 3, 5, 7, 9]

现在,有两种方法可以遍历列表:

  1. 直接访问元素:

    for element in myList:
        print(element, end=" ")
    

这给出了输出:

1 3 5 7 9
  1. 使用索引访问元素

    for idx in range(len(myList)):
        print(idx, ":", myList[idx], end=" ")
    

这给出了输出:

0:1 1:3 2:5 3:7 4:9

【讨论】:

【解决方案2】:

这个:

for i in b:
    if b[i] > x:
        x = b[i]

迭代b 的元素,而不是索引。改成

for i in b:
    if i > x:
        x = i

你还需要从你的函数中返回一些东西,可能是x

【讨论】:

  • 我可能措辞不佳,想法是获取列表中的最大数量,因此我认为我需要 b 中的元素而不是索引。
  • 虽然如果我这样编辑代码,它只会返回 None
  • @PeterPefi 是的,但是for i in b 会遍历元素。将其与for index in range(len(b)): 进行比较。另外,你需要从你的函数中返回一些东西(可能是x)。
  • 所以我会在 for 循环中包含元素的值而不是计数索引?
  • 噢,是的,只是我忘记了返回,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 2016-10-03
  • 1970-01-01
  • 2022-09-23
  • 2020-01-28
相关资源
最近更新 更多