我正在尝试创建一个能够在嵌套列表中找到元素的函数。 如果到目前为止就是这样:
def in_list(ele, lst, place):
if ele == lst[place]:
return True
else:
for i in range(len(lst)):
in_list(ele, lst[i], place)
这是我输入的内容:
a=[[1,2],[3,4]]
if in_list(2,a,1)==True:
print("True")
变量" place"列表中应该找到元素的位置...
现在它以某种方式理解这一行if ele == lst[place]
这是错误消息:TypeError: 'int' object is not subscriptable
提前致谢
答案 0 :(得分:0)
最后一行有两个问题
def in_list(ele, lst, place):
if ele == lst[place]:
return True
else:
for i in range(len(lst)):
in_list(ele, lst[i], place)
lst[i]
是一个整数(假设lst
是一个整数列表),这就是你得到错误的原因。
另一个问题是您没有从else
分支返回任何内容。
在任意但均匀的嵌套情况下,这样的事情可能会更好:
def recursive_contains(item, lst):
if len(lst) == 0:
return False
elif isinstance(lst[0], collections.Iterable):
return any(recursive_contains(item, sublist) for sublist in lst)
else:
return item in lst
用于任意非均匀嵌套,可能是这样的:
def recursive_contains(item, lst):
if not isinstance(lst, collections.Iterable):
return item == lst
for val in lst:
if item == val:
return True
elif isinstance(val, collections.Iterable):
if recursive_contains(item, val):
return True
return False
当然如果你只有2个级别(lst的所有元素都是int的列表),你可以简单地说:
if ele in sum(lst, []):
...
首先使用sum
展平列表。
答案 1 :(得分:0)
其他答案很好地定义了代码中的错误。 重申一下,您假设列表中的每个元素都是嵌套列表,并将其下标为 - elem [place] 。
你不能下标一个原始类型,如整数,因此错误。 请参考以下代码来处理嵌套。
注意 - 您不需要第3个地方参数,如果您正在搜索,则不需要该地方。*
def fetch(data, l):
for element in l:
if type(element) == list:
if fetch(data, element):
return True
else:
if element == data:
return True
return False
进一步认为,您正在寻找一个仅应位于任何嵌套列表的“place”索引的元素。 请参阅下面的代码段 -
def fetch(data, l,place):
if data == l[place]:
return True
else:
for element in l:
if type(element) == list and fetch(data,element,place):
return True
return False
注意 - 如果元素是列表,则仅再次调用fetch。
答案 2 :(得分:0)
a = [[1, 2], [3, 4]]
def inlist(e, l, p):
for lists in range(len(l)):
print("array:", l[lists])
print("Looking for", e)
print("In position", p)
print(l[lists][p])
if l[lists][p] == e:
print(True, ": The element ", e, " is in the list n.", lists, " at the place ", p)
return True
inlist(2, a, 1)
输出
array: [1, 2] Looking for 2 In position 1 2 True : The element 2 is in the list n. 0 at the place 1