builtins.IndexError:列表索引超出范围

时间:2013-10-14 00:39:53

标签: python list function loops

我在这里有这个功能:

def swap_cards(deck, index_deck):
    swap_deck = []
    after_index = []
    bandf_index = []
    if index_deck >= len(deck):
        for i in range(0, len(deck) + 1):
            if deck[i] == index_deck:
                after_index += [deck[0]]
            else:
                bandf_index += [deck[i]]
        swap_deck += [deck[index_deck]] + bandf_index[1:index_deck - 1] + after_index

每次我尝试输入一个大于或等于套牌长度的索引时,我都会得到错误'list index out of range'

示例:

swap_cards([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 9)

我希望[9, 1, 2, 3, 4, 5, 6, 7, 8, 0],但我会将'列表索引超出范围'。

切换最后一个和第一个数字,我不知道我做错了什么。

1 个答案:

答案 0 :(得分:1)

你有len()的问题。假设您的index_deck为9,如上例所示:

if index_deck >= len(deck):
    for i in range(0, len(deck) + 1):

此范围将产生[0,1,2,3,4,5,6,7,8,9,10,11]

        if deck[i] == index_deck:
            after_index += [deck[0]]

由于数组索引从零开始,上面的行将生成错误。甲板[10]和甲板[11]不存在。

        else:
            bandf_index += [deck[i]]

修复上述len()语句也会解决此问题(如果if语句为false,您可能会尝试访问deck [10]。

    swap_deck += [deck[index_deck]] + bandf_index[1:index_deck - 1] + after_index

最后一件事:您验证if index_deck >= len(deck):。这将在deck[index_check]处打破上述行,因为在这里您将始终访问不存在的索引。