2016-11-21 42 views
1

我想在Python中列表中搜索特定值(整型),其中列表可能具有分層結構,因此可能存在特定索引上的列表(例如[1 ,2,[[3,4],[5,6]]這裏的索引2是一個它自己的列表,並且可能有一個列表),等等,或者原始列表的索引可以具有整數值本身(例如[1,2,3,[4,5]]在這種情況下索引0是一個整數..在Python中在列表中分層次搜索

最終,我想索引搜索值與原始列表,否則如果搜索值不是在列表中,它應該給我-1 ...我正在使用遞歸,但我沒有想要的結果...

這裏是M而Y碼

def search_in_list(L,c1): 
    index=-1 
    for i in range(len(L)): 
     if type(L[i])==list: 
      search_in_list(L[i],c1) 
     elif type(L[i])!=list: 
      if c1==L[i]: 
       index=i 
    return index 

這裏是一個例子列表[1,2,[3,4],[5,6]因此,讓我們說,我想搜索6,那麼就應該給我2因爲這是原單的指數上6存在,但我有-1,而不是...

有人能深入到我的代碼,並告訴我的問題和解決方案... 由於提前

+0

爲了防止其他人混淆,最後一個示例列表中缺少終止的']'。 – c3st7n

回答

4

你可以進行一些修改以正常工作:

def search_in_list(l, needle): 
    for i, item in enumerate(l): 
     if type(item) == list: 
      # We found it, return current index 
      if search_in_list(item, needle) >= 0: 
       return i 
     else: 
      if needle == item: 
       return i 
    return -1 

它沒有工作的主要原因是在遞歸調用中。當它返回找到該項目時(通過返回非負索引),您沒有返回當前索引。

+0

感謝很多好友.....我現在明白了問題,並感謝您的解決方案... –

+0

你能告訴我如何更改此代碼,以便如果我只需要在一個分層列表內搜索(僅搜索那些原始列表中的元素列表本身並返回索引和原始列表,如果元素被發現在裏面)並且不檢查單個元素(原始列表是整數本身).....因此,例如L = [1,2,[3,4,5]],我搜索5,那麼它甚至不應該檢查元素0和元素1 ....並返回我2 ..........再次感謝 –

+0

這是一個讓你有點困惑的問題。你爲什麼不開一個新的問題,你清楚地說明你想要什麼樣的例子? – JuniorCompressor