如何修复列表索引超出范围?

2024-09-30 10:31:32 发布

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

这条线路有问题。我不太清楚为什么它给我的列表索引超出了范围。到目前为止,我已经尝试了几种解决方案,但都没有奏效

scoreboardSorted = sorted(scoreboard, key = lambda t: t[1], reverse = True)
# Print first 5
a = 0
for score in scoreboardSorted:
    print(str(score[0]) + ": " + str(score[1]) + " points")
    a = a + 1
    if a == 5:

这是代码的完整部分

def endGame(points):
    scoreboard = []
    # Write score to scoreboard
    with open("scoreboard.csv", "a") as scoreboardFile:
        scoreboardWriter = csv.writer(scoreboardFile)
        scoreboardWriter.writerow([name, points])
    # Open scoreboard in read mode and store in memory
    scoreboardFile = open("scoreboard.csv", "rt")
    scoreboardReader = csv.reader(scoreboardFile)
    for i in scoreboardReader:
        scoreboard.append(i)
    print("\nGame over!")
    print("Well done " + str(name) + ", you got " + str(points) + " points.")
    print("\nTop 5:")
    # Sort list
    scoreboardSorted = sorted(scoreboard, key = lambda t: t[1], reverse = True)
    # Print first 5
    a = 0
    for score in scoreboardSorted:
        print(str(score[0]) + ": " + str(score[1]) + " points")
        a = a + 1
        if a == 5:
            break
    sys.exit()

回溯是这样的

Traceback (most recent call last):
  File "E:\Nea\NEA-PROJECT.py", line 128, in <module>
    endGame(points)
  File "E:\Nea\NEA-PROJECT.py", line 30, in endGame
    scoreboardSorted = sorted(scoreboard, key = lambda t: t[1], reverse = True)
  File "E:\Nea\NEA-PROJECT.py", line 30, in <lambda>
    scoreboardSorted = sorted(scoreboard, key = lambda t: t[1], reverse = True)
IndexError: list index out of range

注:请不要只是张贴解决方案,并实际详细解释。我是一个还在努力学习的中学生,如果你能花点时间解释一下,我会非常感激的。提前谢谢


Tags: csvlambdakeyintrueforpointsreverse
3条回答

如果t(在scoreboard中的项)的值小于2(1或0),则lambda函数中的t[1]是不可能的。这可能意味着csv文件中的值太少

您可以修复csv中的值,也可以在排序时使用某些默认值:

scoreboardSorted = sorted(scoreboard, key = lambda t: t[1] if len(t) > 1 else 0, reverse = True)

请注意,我在这里使用了0作为默认值,但是如果这给了您错误的排序顺序或类型错误,您必须找出另一个合适的值作为默认值

您的scoreboard缺少数据。例如,下表中的第二行缺少第二个值

a = [[1, 2], [3,], [5, 6]]
>>> sorted(a, key=lambda t: t[1])
                                     -
IndexError                                Traceback (most recent call last)
<ipython-input-341-fea6d7792ad0> in <module>
      1 a = [[1, 2], [3,], [5, 6]]
  > 2 sorted(a, key=lambda t: t[1])

<ipython-input-341-fea6d7792ad0> in <lambda>(t)
      1 a = [[1, 2], [3,], [5, 6]]
  > 2 sorted(a, key=lambda t: t[1])

IndexError: list index out of range

您可以使用三元来为缺少的值提供默认值,例如零

>>> sorted(a, key=lambda t: t[1] if len(t) > 1 else 0)
[[3], [1, 2], [5, 6]]
sorted(scoreboard, key=lambda t: t[1], reverse=True)

这假设scoreboards中的每个项本身是至少两个项的序列

听起来scoreboards中至少有一个项的项少于两个

相关问题 更多 >

    热门问题