【问题标题】:elif and list index out of range - Pythonelif 和列表索引超出范围 - Python
【发布时间】:2012-11-29 17:11:12
【问题描述】:

基本上,我的代码精炼了一个数组。如果下一个数据太远,它会搜索上面和下面的索引,看看那条数据是否更适合放在它的索引中,即

def distance(x, y):
    if x > y:
        result = x - y
    else:
        result = y - x
    return result


for y in range(0,10):
    for x in range(0,10):
        newarray[y][0] = myarray[y][0]
        if distance(myarray[y][x],myarray[y][x+1]) > myerror:
            if distance(myarray[y-1][x+1],newarrayarray[y][x]) <= myerror:
                newarray[y][x+1] = myarray[y-1][x+1]
            elif distance(myarray[y-2][x+1],newarrayarray[y][x]) <= myerror:
                newarray[y][x+1] = myarray[y-2][x+1]
            elif distance(myarray[y+1][x+1],newarrayarray[y][x]) <= myerror:
                newarray[y][x+1] = myarray[y+1][x+1]
            elif distance(myarray[y+2][x+1],newarrayarray[y][x]) <= myerror:
                newarray[y][x+1] = myarray[y+2][x+1]
            else:
                newarray[y][x+1] = myarray[y][x+1]
        else:
            newarray[y][x+1] = myarray[y][x+1]

所以这段代码非常适合 y 的特定值,更具体地说是数组的中间值。我遇到的问题是外部值,因为显然 y=10 没有 y+1 值。

我想要发生的是,如果它超出了索引范围,我希望它只是将其视为不符合我设定的条件,而不是将其视为错误。因此,当 y=10 时,当它寻找 y=11 而不是因为它不存在而发出嘶嘶声时,我希望它只是说不,这不是真的,然后继续下一个 if。

我希望这是有道理的,如果没有,请发表评论,我会尝试清理它。

【问题讨论】:

    标签: python arrays if-statement indexing


    【解决方案1】:

    您想要的是,在每个 if 中进行距离计算之前,检查您要测试的相邻 x 或 y 值是否在范围内,并在其与距离检查之间进行逻辑和。由于它使用惰性求值,如果第一个条件失败,它将永远不会求值第二个条件,并且您永远不会出错。

    【讨论】:

    • Python 中的逻辑“与”是and
    • 虽然这是一个更好的结构,但它仍然没有解决第一个条件通过但第二个条件抛出错误的问题。本质上总是存在第一个距离超出范围但下一个索引不存在的情况。解决此问题的唯一方法是禁止外部索引在代码中运行。我更愿意做的是有一个条件,它要求该索引存在,然后执行另一个条件。
    猜你喜欢
    • 2010-11-09
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多