2016-12-16 74 views
0

我有下面的类查找不规则列表中的元素在python

class A: 
    def __init__(self, elements): 
     self.elements = elements 

我需要编写一个函数,它的两个实例,并发现如果实例1是实例2的元件。这是一个不规则的列表,因为这些元素包含更多的A到任意深度的实例。

我想类似的规定:

def is_element_in(instanceA1, instanceA2): 

    found = False 

    for inherit in instanceA2.instanceof.inherits: 
     if instanceA1 == inherit: 
      found = True 
     else: 
      n_inherit(instanceA1, inherit) 

    return found 

什么是写这个的最好方法是什么?我阅读了一些关于列表清单的答案。我不知道这是否是最好的主意,因为我必须访问字段才能获取元素列表。任何可以在这里使用的Python库?

+0

让我看看,如果得到它。你有一些像[[[1,2],[3],[[4],5]]这样的列表,并且想要找到数字'4'? – Gabriel

+0

是的,我想要它,所以如果4在那里,我返回true – Lana

回答

2

一个可能的解决方案是

def is_element_in(items, element): 
    for item in items: 
     if item == element: 
      return True 

     if isinstance(item, list) and is_element_in(item, element): 
      return True 

    return False 

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

print(is_element_in(items, 4)) 
print(is_element_in(items, 0)) 

打印

True 
False 
+0

OP说,嵌套深度是任意的。我们可能应该尝试一种迭代方法而不是递归方法。 – nullop

+0

以递归方式做它是非常直观的,所以我不认为需要另一个aproach。您可能会说,出于性能方面的原因,我同意你的意见,但目前这不是问题。无论如何,我们正在重新发明轮子(它当然已经在一些众所周知的库中实现,应该用它来代替)。 – Gabriel