使用递归搜索嵌套列表

时间:2017-11-17 10:53:28

标签: python

我想检查嵌套列表中是否存在某个数字

Slist = [[[10, 20], [30, 40]], [[50, 60], [70, 80]]]

def ASearch(t, L):

if t==L:
    return True
else:

    return  ASearch(t, L[0]) or ASearch(t, L[1])

ASearch(15,Slist)

有什么问题?

更新

OP意味着发布:

Slist = [[[10, 20], [30, 40]], [[50, 60], [70, 80]]]

def ASearch(t, L):

    if t==L:
        return True
    return ASearch(t, L[0]) or ASearch(t, L[1])


print(ASearch(15, Slist))
print(ASearch(50, Slist))

预期产出:

False
True

实际输出:

TypeError: 'int' object is not subscriptable

2 个答案:

答案 0 :(得分:2)

您的代码中的少数问题之一是它只能返回True

你想要的可能就是:

def ASearch(t, L):
    if type(L) == list:
        return any(ASearch(t, l) for l in L)
    else:
        return t == L

答案 1 :(得分:0)

另一种方法是单独展平列表,然后检查该元素是否包含在展平列表中:

    {
        "operation": {
                       "type": "string",
                       "enum": ["create","update"]
         },
        "payload": {
    // I have to add json file refs: based on the value of operation(create,update)
        }
    }

现在,您可以使用元素和列表调用def flatten(L): flat = [] if isinstance(L, list): for item in L: flat += flatten(item) else: flat.append(L) return flat def ASearch(t, L): return t in flatten(L) 函数:ASearch

或者,您现在可以使ASearch(50, nested_list)成为lambda函数:

ASearch