2017-02-13 108 views
1

如何檢查列表是否包含其他列表? 我需要它,以便如何查看列表是否包含Python中的另一個列表?

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

輸出True,而像

['cow', 12, 3, 4]

將輸出False

+2

'[ '牛' 在lst'是所有你需要的 –

+0

你需要檢查特定的內部列表,或檢查是否有任何內部列表? – Blckknght

+0

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

回答

0

下面是使用列表理解的整潔解決方案。

鑑於obj = [['cow'], 12, 3, [[4]]],我們將首先使用列表中理解到獲得obj類型的列表:現在

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

,我們簡單地檢查list是在我們創建的類型列表。讓我們重溫我們的列表理解並將其變成布爾表達式:

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

在那裏,這很好,很短。它是如何工作的?只要條件True

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

any停止所以這個只需要檢查的必要只盡可能多的項目:

>>> 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())'literally *是*'列表'。 – Wombatz

+0

@Wombatz感謝'type(list())'冗餘的指針,我更新了我的答案。在代碼示例中使用'input'有什麼問題? – daveruinseverything

+0

這是一個[內置函數](https://docs.python.org/3/library/functions.html)python2和python3 – Wombatz

3

如果你也想找到列出的子類,那麼你應該使用isinstance

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

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

isinstance(item, list) for item in objgenerator expression的作品類似for -loop或列表理解。它也可能是(長,速度較慢,但​​也許這是更好地理解)寫爲:

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

_longer和略慢_爲什麼它會更慢? – Gabriel

+1

@Gabriel因爲內建的''''是用C編寫的(至少如果我們在談論CPython的話),而循環+'if'只是「Python」。 – MSeifert

0

您可以使用此方法,如果您的列表中不包含某些字符串「[」詮釋它。

def check(a): 
    a=str(a) 
    if a.count('[')==1: # or a.count(']')==1; 
     return False 
    return True 

在Python 2.7版,我們有一個模塊,這項工作:(我不知道在Python 3.x的任何這樣的模塊)

from compiler.ast import flatten  
def check(a): 
    if flatten(a)==a: 
     return False 
    return True 
相關問題