我有一个简单的问题,这行代码
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)
答案 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] = 5
,num_list[0++] = 10
。如果“数字”是10,那么numbers[num_time]
是什么意思? (即10[num_time]
- 那应该是什么意思?)。
而不是将numbers[num_time+1]
作为参数传递回函数,而不是使用切片。