首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python列表超出范围5

python列表超出范围5
EN

Stack Overflow用户
提问于 2017-10-01 09:05:06
回答 1查看 63关注 0票数 0
代码语言:javascript
运行
复制
a = ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]

def dirReduc(arr):
index = int(0)
for i in arr:
    for j in arr:
        if (len(arr[index]) == len(arr[index + 1])) and (arr[index] != arr[index + 1]):
            arr.pop(index)
            arr.pop(index)
            index = 0
        else:
            index += 1
    print(arr)


dirReduc(a)

此代码的目的是减少彼此相邻的相反方向。而我的吡喃给了我正确的输出,没有任何错误,即:

代码语言:javascript
运行
复制
arr = ["WEST"]

在它应该编译的codewars网站上,我通过了所有的测试,但是这个站点给了我:

IndexError:列出超出范围的索引

有什么简单的方法来处理这个错误,让它在代码战中工作吗?

EN

回答 1

Stack Overflow用户

发布于 2017-10-01 09:45:22

不是排除另一种方法,而是在遍历原始数组的同时组装一个新数组:

代码语言:javascript
运行
复制
a = ["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]
opposite = {"NORTH": "SOUTH", "SOUTH": "NORTH", "WEST": "EAST", "EAST":"WEST"}

def dirReduc(arr):
    if not arr:
        return []
    b=[]
    i = 0
    while i < len(arr):
        if i == len(arr)-1:
            b = b+[arr[i]]
            break
        else:
            if arr[i+1] == opposite[arr[i]]:
                i = i+2
            else:
                b=b+[arr[i]]
                i = i+1
    return b


reduced_a = a
while True:
    reduced_b = dirReduc(reduced_a)
    if reduced_b == reduced_a:
        reduced_a = reduced_b
        break
    else:
        reduced_a = reduced_b

print(dirReduc(reduced_b))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46510850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档