2016-05-18 19 views
0

リストで構成されているオブジェクトを解析する必要があります。しかしそれはリストのリストの中にリストを持つことができます:obj=[[smth1],[[smth2],[smth3]]]それぞれsmthXもリストにすることができます。isinstance()の代わりに何を使うべきですか

私が知っている価値を探しているのは、「第2層のリスト」です。私の例では、それは可能性があります[[smth2],[smth3]]

私は今何をしているのですか、私のオブジェクトをiteraratingし、私が繰り返しているものがリストであるかどうかをテストしています。もしそうなら、私は自分の価値を探します。 isinstance()の使用は、使用する前に(と私の使用は特別な機会のようには見えません)

だけの特別な機会のためのものであることを

for list in obj : 
    if isinstance(list, obj) : 
     for souslist in list : 
     I LOOK FOR MY VALUE 

しかし、私はどこにでも読んでいます(http://canonical.org/~kragen/isinstance/ stackoverflowのスレッドがたくさん) isinstance()私はlist [0]がtry/exceptで返されたものをテストしていましたが、それはさらに悪いと感じました。クリーンな方法でこれを達成するための代替手段はありますか? (私はobj私はそれで動作する必要があります

+2

を使用して確認してくださいご利用には、実際に、私には罰金です。私自身の 'isinstance'の99%は、異種の型のコレクションを繰り返しているときです。異種型のコレクションは、あなたがここでやっていることとまったく同じように見えます。 (これは私の意見であるためコメントではなく回答として投稿しています) – Kevin

+0

* 2番目のレイヤーリスト*で正確に何を意味していますか? 2つのネストされたリストであるアイテムを見つけたい場合は、最初のループでこれを達成することはできません。 – Kasramvd

+0

あなたのケースでは 'isinstance'を使うことに何も問題ありません。あなたの最初のアプローチも大丈夫でした。Pythonは「許可よりも許しを求めるのは簡単です」と信じています。https://docs.python.org/3.4/glossary.html#term-eafp – DeepSpace

答えて

1

の形式上の任意の力を持っていない)あなたが最初にあなたが長さをチェックする必要がある2つの項目あなたは)すべての項目がリストされていることを確信しているならば、isinstance` `のサブリスト内のすべての項目がリストされている場合isinstance()

for sub in obj: 
    if len(sub) == 2 and all(isinstance(i, list) for i in sub): # you can add " and isinstance(sub, list)" if you are not sure about the type of sub 
     look_val(sub) 
関連する問題