2012-03-18 2 views
49

もし我々次のリストを持っている:私は、次のコードでaValidListを置き換えることができるものリストの要素が(Pythonで)リストであるかどうかをチェックする方法?

list = ['UMM', 'Uma', ['Ulaster','Ulter']] 

私は、リスト内の要素がそれ自身リストであるかどうかを確認する必要がある場合は、?

for e in list: 
    if e == aValidList: 
     return True 

特別なインポートがありますか?変数/要素がリストであるかどうかをチェックする最良の方法はありますか?

+1

[変数がリストまたはタプルであるかどうかをテストする]の重複が可能です(http://stackoverflow.com/questions/2184955/test-if-a-variable-is-a-list-or-tuple) –

+1

なぜそれが必要ですか?あなたのリストを平らにしようとしていますか? –

+4

また、*(1)*組み込みの 'list()'をシャドーするので、 'list'を変数名として使用しないでください。 *(2)*丸括弧の意味はなんですか? –

答えて

6

式は次のようになります。

if isinstance(e, list): 

あなたは、オブジェクトはリストやタプルであることを確認isinstanceにいくつかのクラスを渡したい場合は:

... 
return any(isinstance(e, list) for e in my_list) 

試験:

>>> my_list = [1,2] 
>>> any(isinstance(e, list) for e in my_list) 
False 
>>> my_list = [1,2, [3,4,5]] 
>>> any(isinstance(e, list) for e in my_list) 
True 
>>> 
+1

質問で 'list'という名前の変数が' list'型を隠すことを強調する価値があります。単純に貼り付けるとここに投稿された他の回答のほとんどが失敗します。 –

+0

for-loop-ifの組み合わせの代わりに 'any()'を使うための+1です。 – Christoph

20
  1. listの特定のプロパティを使用すると、アイテムを持っているしたいワークアウト。彼らはインデックスを作成する必要がありますか?スライス可能?彼らは.append()メソッドが必要ですか?

  2. collectionsモジュールの特定のタイプを記述する抽象基本クラスをルックアップします。

  3. 使用isinstance

    isinstance(x, collections.MutableSequence) 
    

あなたは頼むかもしれない "理由だけではなくtype(x) == listを使うのか?"あなたはリストのようなものをサポートしないので、あなたはそれをしてはいけません。そして、Pythonの考え方の一部はduck typingです:

私はアヒルのようなアヒルと泳ぐように歩くとアヒルのように鳴く鳥を参照してください、私はつまり、それは鳥アヒル

呼び出しますオブジェクトがlistであることを要求する必要はありません。必要なメソッドを持っているということだけです。 collectionsモジュールには、Javaインタフェースのような抽象基本クラスが用意されています。たとえば、collections.Sequenceのインスタンスであるすべてのタイプは、索引付けをサポートします。

+0

要点この回答を読んでいる人にとっては、ベースクラスのリファレンス( 'collections.MutableSequence'は' list'には正しいが、ここにはメインリファレンスがあります)、http://docs.python.org/library/collections.html #collections-abstract-base-classes – ninjagecko

+2

@ninjageckoこれは#2のリンクです)= – katrielalex

+1

@Alexあなたのアドバイスは技術的には正しいですが、通常は必要ない余分な作業が必要です。なぜ単にisinstance(x、list)を使わないのですか?それは簡単で標準的な練習であり、良い練習とみなされます。さらに、インターフェースやABCを考えてみると、初心者のプログラマーが困ってしまう可能性があります。 「より良い」ソリューションは、一貫して使用するのが大変な場合はベストプラクティスではありません。 – alexis

関連する問題