2016-12-16 70 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