Python函数中的序列项目0错误

2024-09-30 16:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个函数体,它接受一个方向数组,如["NORTH", "SOUTH", "SOUTH", "EAST", "WEST", "NORTH", "WEST"]并将其缩短,因此相邻的相反方向将被删除。这个示例数组应该只返回["WEST"]。在

问题是代码在大多数情况下都能工作,但有时它会抛出一个TypeError: sequence item 0: expected str instance, int found。我看不出引起这个问题的确切原因,也不知道如何解决它。在

(问题在代码战上: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

Tags: inforindexifrangeitemarraywest
1条回答
网友
1楼 · 发布于 2024-09-30 16:32:34

您正在修改赋予函数的列表。它们的检查代码希望它保持不变,即包含字符串;但是您要做的第一件事是用数字替换字符串(而且,您不会在相同的列表中更改它)。当检查代码试图对原始列表执行某些操作时,它会抛出您看到的异常(因此它不是来自代码的)。在

通过先复制给定的列表,问题很容易解决。在代码的第一行插入以下内容:

arr = arr[:]

它会起作用的。在

说我必须注意到这项任务对你来说太难了。你写了一个非常复杂和容易出错的解决方案;你肯定要先练习一些简单的练习。在

编辑为了说明我的意思,以下是通过codewars测试的解决方案:

^{pr2}$

相关问题 更多 >