Python 我正试图写一个代码,告诉你该往哪个方向走

Python 我正试图写一个代码,告诉你该往哪个方向走,python,python-3.x,list,algorithm,Python,Python 3.x,List,Algorithm,挑战: 我的尝试: array=["NORTH","SOUTH","SOUTH","EAST","WEST","NORTH","WEST"] list=[] for i in range(len(array)): if array[i]=="NORTH": list.append(i) for i

挑战:

我的尝试:

array=["NORTH","SOUTH","SOUTH","EAST","WEST","NORTH","WEST"]
list=[]
for i in range(len(array)):

    if array[i]=="NORTH":
        list.append(i)
        for item in array:
            if item == "SOUTH":
                list.append(item)
                array.remove(item)
                break
        array.pop(i)
    elif array[i]=="SOUTH":
        list.append(i)
        for item in array:
            if item == "NORTH":
                list.append(item)
                array.remove(item)
                break

        array.pop(i)
    elif array[i]=="EAST":
        list.append(i)
        for item in array:
            if item == "WEST":
                list.append(item)
                array.remove(item)
                break

        array.pop(i)
    elif array[i]=="WEST":
        list.append(i)
        for item in array:
            if item == "EAST":
                list.append(item)
                array.remove(item)
                break

        array.pop(i)

    else:
        if array[i]!=None:
            print(array)
        else:
            print(list)
问题在于,当我尝试在终端中运行时,它会显示以下错误:

line 5, in <module>
    if array[i]=="NORTH":
IndexError: list index out of range
第5行,在
如果数组[i]=“北”:
索引器:列表索引超出范围

如果您能帮助我解决这个问题并帮助我改进代码,那就太好了。

与其将结果追加到新列表中,不如更新原始列表。删除值后,代码尝试访问索引时,索引超出范围。当我们需要更新列表时,我们需要使用
枚举
,而不是使用具有列表长度的for循环

以下是我关于挑战的解决方案。这可能不是最佳解决方案,但它通过了所有测试用例:

def dirReduc(arr):    
    while True:
        retry = False
        for i, val in enumerate(arr):
            if i+1 < len(arr):
                if val == "NORTH" and arr[i+1] == "SOUTH":
                    del arr[i]
                    del arr[i]
                    retry = True
                    break
                if val == "SOUTH" and arr[i+1] == "NORTH":
                    del arr[i]
                    del arr[i]
                    retry = True
                    break
                if val == "WEST" and arr[i+1] == "EAST":
                    del arr[i]
                    del arr[i]
                    retry = True
                    break
                if val == "EAST" and arr[i+1] == "WEST":
                    del arr[i]
                    del arr[i]
                    retry = True
                    break
        if retry == False:
            break
    return arr
def dirreduce(arr):
尽管如此:
重试=错误
对于i,枚举中的val(arr):
如果i+1
说明:

array=["NORTH","SOUTH","SOUTH","EAST","WEST","NORTH","WEST"]
list=[]
for i in range(len(array)):

    if array[i]=="NORTH":
        list.append(i)
        for item in array:
            if item == "SOUTH":
                list.append(item)
                array.remove(item)
                break
        array.pop(i)
    elif array[i]=="SOUTH":
        list.append(i)
        for item in array:
            if item == "NORTH":
                list.append(item)
                array.remove(item)
                break

        array.pop(i)
    elif array[i]=="EAST":
        list.append(i)
        for item in array:
            if item == "WEST":
                list.append(item)
                array.remove(item)
                break

        array.pop(i)
    elif array[i]=="WEST":
        list.append(i)
        for item in array:
            if item == "EAST":
                list.append(item)
                array.remove(item)
                break

        array.pop(i)

    else:
        if array[i]!=None:
            print(array)
        else:
            print(list)
我已经遍历了数组中的所有元素。如果我得到了任何可以相互湮灭的连续对,我会从列表中删除它们。这类配对是:(北,南),(南,北),(东,西)和(西,东)

我将继续此操作,直到列表中没有可移动对为止。最后,我返回更新后的列表

参考资料:

array=["NORTH","SOUTH","SOUTH","EAST","WEST","NORTH","WEST"]
list=[]
for i in range(len(array)):

    if array[i]=="NORTH":
        list.append(i)
        for item in array:
            if item == "SOUTH":
                list.append(item)
                array.remove(item)
                break
        array.pop(i)
    elif array[i]=="SOUTH":
        list.append(i)
        for item in array:
            if item == "NORTH":
                list.append(item)
                array.remove(item)
                break

        array.pop(i)
    elif array[i]=="EAST":
        list.append(i)
        for item in array:
            if item == "WEST":
                list.append(item)
                array.remove(item)
                break

        array.pop(i)
    elif array[i]=="WEST":
        list.append(i)
        for item in array:
            if item == "EAST":
                list.append(item)
                array.remove(item)
                break

        array.pop(i)

    else:
        if array[i]!=None:
            print(array)
        else:
            print(list)

在迭代过程中更改
数组的长度
通常是个坏主意。请打印一份文件,告诉您要访问哪个索引或哪个项目。您将看到,您将尝试迭代访问元素n+1的列表,而它只有n个元素。那么我应该怎么做..请更正我很高兴。当你有能力时,接受答案并投票表决。