python函数中的序列项0错误

时间:2017-03-14 09:36:31

标签: python

这是一个函数的主体,它采用["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]之类的方向数组并缩短它,因此删除了紧跟在彼此之后的相反方向。此示例数组应仅返回["WEST"]

问题是代码适用于大多数情况,但有时它会抛出TypeError: sequence item 0: expected str instance, int found。我无法看到导致问题的确切案例,我无法弄清楚如何解决它。

(问题出在CodeWars上:https://www.codewars.com/kata/directions-reduction

for index in range(len(arr)):
   if arr[index]=="NORTH": arr[index]=1
   if arr[index]=="SOUTH":arr[index]=-1
   if arr[index]=="EAST": arr[index]=2
   if arr[index]=="WEST": arr[index]=-2

def nulandrem(array):
    count=len(array)
    for index1 in range(0,count-1):
        if array[index1]+array[index1+1]==0: 
            array[index1]=0
            array[index1+1]=0
    newarr=[]
    for item in array:
        if item!=0:
            newarr.append(item)
    return newarr

arr=nulandrem(arr)


while arr!=nulandrem(arr):
    arr=nulandrem(arr)

for index3 in range(len(arr)):
    if arr[index3]==1: arr[index3]="NORTH"
    if arr[index3]==-1: arr[index3]="SOUTH"
    if arr[index3]==2: arr[index3]="EAST"
    if arr[index3]==-2: arr[index3]="WEST"
return arr

1 个答案:

答案 0 :(得分:0)

您正在修改为您的功能提供的列表。他们的检查代码期望它保持不变,即包含字符串;但你做的第一件事是用数字替换字符串(和没有,你不会在相同的列表中更改它)。当检查代码尝试对原始列表执行某些操作时,它会抛出您看到的异常(因此它不是来自您的代码)。

通过首先复制给定列表,可以轻松解决问题。插入以下代码作为代码的第一行:

arr = arr[:]

它会起作用。

说我必须注意到你的任务太难了。你写了一个非常复杂且容易出错的解决方案;你必须先练习更简单的练习。

编辑来说明我的意思,这是在代码大战中通过测试的解决方案:

def dirReduc(arr):
    opposite = {"NORTH": "SOUTH", "SOUTH": "NORTH", "EAST": "WEST", "WEST": "EAST"}
    stack = []
    for elt in arr:
        if len(stack) and opposite[elt] == stack[-1]:
            stack.pop()
        else:
            stack.append(elt)
    return stack