2016-11-21 9 views
1

リストが階層構造を持つ可能性があるPythonのリストの特定の値(整数)を検索したいので、特定のインデックスのリストが存在する可能性があります、2、[[3,4]、[5,6]]ここでインデックス2はそれ自身のリストであり、そのリストが再び存在する可能性があります)、そうすると、元のリストのインデックスは整数値この場合のインデックス番号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]]だからそれはだから、それは私に2を与える必要があり、のは、私は6を検索したいとしましょう元のリストのインデックスは、どの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