【问题标题】:Python IndexError: list index out of range (2D list)Python IndexError:列表索引超出范围(二维列表)
【发布时间】:2021-04-28 06:36:21
【问题描述】:

我是 python 新手,目前正在测试二维列表。

这个程序使用一个二维列表来存储一周中每天 3 种面条的销售额。

另外,在每一天,也会有一个栏目存储每天的总销售额。

但是,我收到一个 IndexError,我似乎无法弄清楚出了什么问题。

Sales = [[]]

def enterSales(arr):

    i = 0
    j = 0
    total_per_day = 0

    while i < 7:

        day = {
            0: "Monday",
            1: "Tuesday",
            2: "Wednesday",
            3: "Thursday",
            4: "Friday",
            5: "Saturday",
            6: "Sunday"
        }

        print("Enter " + day[i] + " sales for...")

        for j in range(3):

            noodle = {
                0: "Dried",
                1: "Dark",
                2: "Spicy",
            }

            arr[i].append(int(input(noodle[j] + " noodle: ")))

            # calculate total sales per day
            total_per_day += arr[i][j]

        arr[i].append(total_per_day)
        i += 1


def totalWeeklySales(arr):

    total_sales_per_week = 0

    for i in range(7):

        total_sales_per_week += arr[i][3]

    return total_sales_per_week


enterSales(Sales)
value = totalWeeklySales(Sales)
print("Total sales of the week is", value, ".")

【问题讨论】:

  • 您正在做的是声明Sales = [[]],这就像有一个包含 1 个列表项的列表。结果,它将存储第一天的值,但不会有另一个子列表来存储第二天以后的项目。您需要在开始接受销售之前将列表附加到arr

标签: python list index-error


【解决方案1】:

在您的 for 循环中,您必须为每个 i 循环添加空列表。

在递增i之前添加以下行

arr[i].append(total_per_day) # after this line in your code
arr.append([])  #add this line

【讨论】:

    【解决方案2】:

    看起来问题出在您的销售列表中。 在每次迭代中,您都尝试将一个新元素附加到 Sales 中的第 i 个列表:

    arr[i].append(int(input(noodle[j] + " noodle: ")))

    因为你在开头有Sales=[[],]。第一次迭代(i = 0)工作得很好。当第二个尝试访问 Sales[1] -> 超出范围时会出现问题,因为 Sales 只有 1 个元素。

    因为您有 7 次迭代 (while i &lt; 7)。您可以按如下方式初始化您的销售额:

    Sales = [[] for x in range(7)]

    这将导致Sales=[[], [], [], [], [], [], []]

    我还建议您将 7 放入某个常量中,这样它的含义就更清楚了,您可以重复使用它。

    【讨论】:

      猜你喜欢
      • 2015-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 2017-04-05
      • 2012-07-15
      • 2013-06-04
      • 1970-01-01
      相关资源
      最近更新 更多