如何在分层列表中查找数字

时间:2013-11-17 21:48:31

标签: python arrays search python-2.7 recursion

我在python中有一个分层列表,在层次结构中,列表包含许多列表,但未定义子子列表的数量和长度。

[[5], [[1], [[2, 3], [4]]]]

我试图通过以下方式找到一个数字,但函数没有返回任何内容,是否有找到它的pythonic方法?

def is_present(lst,value):
      for element in lst:
          if isinstance(element, list):
              return is_present(element,value)
          else:
              if value == element:
              return True

2 个答案:

答案 0 :(得分:3)

你遇到了一些问题:

  1. 您在退货声明的行上的缩进不正确。
  2. 您永远不会在任何地方返回False(如果该元素不在列表中)。
  3. 在递归时,如果递归返回True(并且忽略True从递归返回),则只应返回False。这样可以确保即使递归找不到元素,也会继续检查列表。
  4. 以下是修复这些问题的功能:

    def is_present(lst,value):
        for element in lst:
            if isinstance(element, list):
                if is_present(element,value):
                    return True
            else:
                if value == element:
                    return True
        return False
    

答案 1 :(得分:0)

In [14]: %paste
def isPresent(L, val):
  if val in L:
    return True
  else:
    return any(isPresent(i,val) for i in L if isinstance(i, list))

## -- End pasted text --

In [15]: L = [[5], [[1], [[2, 3], [4]]]]

In [16]: isPresent(L, 1
   ....: )
Out[16]: True

In [17]: isPresent(L, 2)
Out[17]: True

In [18]: isPresent(L, 3)
Out[18]: True

In [19]: isPresent(L, 4)
Out[19]: True

In [20]: isPresent(L, 5)
Out[20]: True

In [21]: isPresent(L, 6)
Out[21]: False