Python Lambda函数 - 列表索引超出范围

时间:2018-03-23 22:47:34

标签: python python-3.x lambda

我是Python中lambda函数的新手,我试图使用CSV文件。

我的文件eggs.csv将从空开始。 CSV文件的目的是为我玩的小游戏存储高分数。文件中的每一行都包含三个值:用户名,高分和日期/时间。

此代码执行(或者更确切地说应该执行)的操作是读取CSV的每一行,并将每一行存储为自己的列表。如果CSV少于三行,则会附加一些(为了我的测试目的)。然后将每个列表附加到current_scores

如果current_scores中有7行或更多行,则会根据行列表的第2项(分数)按降序对它们进行排序。它会检查current_scores列表中的最后一项,如果播放器high_score(现在硬编码)高于该项,则会删除最后一项,并附加新列表(将是CSV中的新行),玩家得分为current_scores

如果current_scores中的项目少于7个,则只需附加播放器的信息。然后根据列表中每个列表的分数对列表进行排序(列表中的第二项是分数)。

我正在使用lambda函数进行排序,运行时我会抛出此错误:

C:\Users\kyle\Desktop\csv_workspace>python text_csv.py
[[], ['Kyle', 40, '03/23/2018'], ['Kyle', 41, '03/23/2018'], ['Kyle', 292, '03/23/2018']]
Traceback (most recent call last):
  File "text_csv.py", line 29, in <module>
    current_scores = sorted(current_scores, key=lambda x: x[1], reverse=True)
  File "text_csv.py", line 29, in <lambda>
    current_scores = sorted(current_scores, key=lambda x: x[1], reverse=True)
IndexError: list index out of range

为什么列表索引(可能是lamba函数)超出范围?更重要的是,我该如何解决?

请参阅下面的代码:

user = "Kyle"
high_score = randint(1, 1000)
day = time.strftime("%m/%d/%Y")
with open('eggs.csv', 'r', newline='') as csvfile:
    scores_reader = csv.reader(csvfile, dialect="excel")
    current_scores = []
    for row in scores_reader:
        current_scores.append(row)
    if len(current_scores) < 3:
        for i in range(0, 3):
            current_scores.append(['Kyle', 40+i, day])
    if len(current_scores) >= 7:
        current_scores = sorted(current_scores, key=lambda x: x[1], reverse=True)

        print(current_scores)
        if high_score > int(current_scores[-1][1]): # if player high score is higher than any of current scores
            current_scores.remove(current_scores[-1]) # remove last item in list
            current_scores.append([user, high_score, day]) # append player high score
            current_scores = sorted(current_scores, key= lambda x: x[1], reverse=True)
    else:
        current_scores.append([user, high_score, day])


    print(current_scores)
    current_scores = sorted(current_scores, key=lambda x: x[1], reverse=True)
with open("eggs.csv", 'w', newline="") as csvfile:
    scores_writer = csv.writer(csvfile, dialect="excel")
    for row in current_scores:
        scores_writer.writerow(row)

1 个答案:

答案 0 :(得分:0)

看起来你的开头有一个空行:

[[], ['Kyle', 40, '03/23/2018'], ['Kyle', 41, '03/23/2018'], ['Kyle', 292, '03/23/2018']]

第一个条目[]在索引1处没有元素。