Python __getitem__错误

时间:2014-03-06 20:43:05

标签: python

我有一个简单的问题,这行代码

row[time] == numbers[num_time]:

给我错误:

int has no attribute __getitem__
经过一些研究,我发现当你尝试在int上调用列表号时会发生这种错误。在这种情况下,我发送一个包含3个数字的列表,并希望递归(我们不允许在第二个数字列表上使用循环:(),看看第二个列表中的任何元素是否在第一个列表中如果它们是,那么将会有所作为,但是如果它们不是,那么该函数应该继续到行列表中的下一个,执行相同的操作,直到row为空。

def row_find(row,numbers,time,num_time):
    if numbers==[]:
         return row_find(row[time+1],numbers,time+1,num_time=0)
    if row== []:
         return row

    else:
        if  row[time]== numbers[num_time]:
            num_time=0
            return row,row_find(row[time+1],numbers,time+1,num_time)
        else:
            return row,row_find(row[time],numbers[num_time+1],time,num_time)


lst=[5,2,9]
num_lst=[5, 10, 23, 31, 44]
row_find(lst,num_lst,0,0)

5 个答案:

答案 0 :(得分:1)

下面:

row_find(row[time],numbers[num_time+1],time,num_time)

您使用的numbers[num_time+1]不是列表。

我认为这应该成功:

def row_find(row,numbers,time,num_time):
    if numbers==[]: # If numbers list is empty, it make no sense to contiue
         return False
    if row== []: # If numbers list is empty, it make no sense to contiue
         return False

    if  row[time]== numbers[num_time]: #Already found an element that is in both lists
        print("found -> " + str(time) + " " + str(num_time))
        return True
    else:
        if num_time < len(numbers)-1: # If remaining elements in numbers
            if row_find(row,numbers,time,num_time+1): # Check next one
                return True
            else: # I
                if time < len(row)-1: # If remaining element in row
                    return row_find(row,numbers,time+1,0) # check numbers from beginning with next row
                else:
                    return False # If not, no elements in both lists


lst=[8,2,9]
num_lst=[9, 10, 88, 31, 55]
row_find(lst,num_lst,0,0)
# found -> 2 0

答案 1 :(得分:1)

检查您发送的内容为numbers可能是您发送的内容不是列表。您得到的错误是Pythons告诉您要求在错误的对象上使用函数,attribute __getitem__正在达到列表numbers的索引,如numbers[1]。< / p>

答案 2 :(得分:0)

下面:

return row,row_find(row[time],numbers[num_time+1],time,num_time)

您传递一个整数作为numbers的{​​{1}}参数。你必须传递一个清单。您在寻找slices吗?

答案 3 :(得分:0)

你想做

row_find(row[time],numbers[1:],time,num_time)

其中[1:]返回从第二个元素开始的列表。

您也可以使用Python布尔评估。如果序列为空,则将其计算为False,而不是

if numbers==[]:

你可以这样做:

if not numbers:

答案 4 :(得分:0)

你需要做一些事情:

首先,检查你的参数(数字)实际上是一个列表。将其添加到您的函数顶部:

if not isinstance(numbers, collections.Iterable):
    # error! numbers is meant to be a list. report on this error somehow

以及稍后的代码:

代表num_lst=[5, 10, 23, 31, 44]num_lst[0] = 5num_list[0++] = 10。如果“数字”是10,那么numbers[num_time]是什么意思? (即10[num_time] - 那应该是什么意思?)。

而不是将numbers[num_time+1]作为参数传递回函数,而不是使用切片。