2017-02-13 4 views
1

リストに他のリストが含まれているかどうかを確認するにはどうすればよいですか? リストにPythonで別のリストが含まれているかどうかを確認する方法はありますか?

[['cow'], 12, 3, [[4]]]

が出力Trueなるように

['cow', 12, 3, 4]

のようなものが出力Falseだろうが、私は、それを必要とします。

+2

'[ '牛']されます必要なもの –

+0

特定の内部リストを確認するか、内部リストがあるかどうかを確認する必要がありますか? – Blckknght

+0

http://stackoverflow.com/questions/2225038/determine-the-type-of-a-python-object –

答えて

0

ここでは、リストの理解を使用したきれいな解決策を示します。

obj = [['cow'], 12, 3, [[4]]]を考えると、我々は最初のobj種類のリストを取得するには、リストの内包表記を使用します:listたちが作成したタイプのリストにある場合

>>> [type(x) for x in obj] 
[<type 'list'>, <type 'int'>, <type 'int'>, <type 'list'>] 

今、私たちは単にチェック。リストの理解度を見直して、ブール式にしてみましょう:

>>> list in [type(x) for x in obj] 

ここで、素敵で短いです。それはうまくいくのですか?あなたはまた、リストのサブクラスを検索したい場合は

>>> obj = [['cow'], 12, 3, [[4]]] 
>>> list in [type(x) for x in obj] 
True 
>>> obj = ['cow', 12, 3, 4] 
>>> list in [type(x) for x in obj] 
False 
+2

'input'と' type(list()) 'という文字列をそのまま使用しない* is * 'リスト'。 – Wombatz

+0

@Wombatzは、 'type(list())'の冗長性に関するポインタのおかげで答えを更新しました。コード例で 'input'を使うのはどうですか? – daveruinseverything

+0

python2とpython3の両方で[組み込み関数](https://docs.python.org/3/library/functions.html)です。 – Wombatz

3

あなたはisinstance使用する必要があります。

def any_list_in(obj): 
    return any(isinstance(item, list) for item in obj) 

anyが止まるとすぐに条件がTrueであるように、これは必要な場合のみのみなど、多くの項目をチェックする必要があります。

>>> any_list_in([['cow'], 12, 3, [[4]]]) 
True 

>>> any_list_in(['cow', 12, 3, 4]) 
False 

isinstance(item, list) for item in obj

for -loopまたはリスト内包表記に似ています generator expressionです。また、(長いと少し遅いが、多分それは理解する方が良いでしょう)のように書くことができます

def any_list_in(obj): 
    for item in obj: 
     if isinstance(item, list): 
      return True 
    return False 
+0

_longerと少しslower_なぜそれは遅くなるのでしょうか? – Gabriel

+1

@Gabriel組み込みの'any'はCで書かれているので(少なくともCPythonについて言えば)、ループ+ 'if'はPythonだけです。 – MSeifert

0

リストは「[」、それをint型といくつかの文字列が含まれていない場合は、このメソッドを使用することができます。 lst`で

私たちは私のpython 3.xではどのようなモジュールを知らない:(この仕事のためのモジュールを持っているのpython 2.7で
def check(a): 
    a=str(a) 
    if a.count('[')==1: # or a.count(']')==1; 
     return False 
    return True 

from compiler.ast import flatten  
def check(a): 
    if flatten(a)==a: 
     return False 
    return True 
関連する問題