在嵌套列表中寻找元素

时间:2017-09-05 14:54:02

标签: python list function

我正在尝试创建一个能够在嵌套列表中找到元素的函数。 如果到目前为止就是这样:

    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

提前致谢

3 个答案:

答案 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