2016-09-26 54 views
0

說我有喜歡如何檢查Python中的空嵌套列表?

cata = [["Shelf", 12, "furniture", [1,1]], 
     ["Carpet", 50, "furnishing", []]] 

名單,我想找出每個嵌套的列表,如果是空的或不是。

我知道使用循環通過列表進行迭代,並且if語句來驗證,因爲我有一個功能

def myfunc(cata): 
    for inner in cata: 
     for inner_2 in inner[3]: 
      if inner_2: 
       return "True" 
      else: 
       return "False" 

然而,而不是返回:

'True' 
'False' 

我得到的是:

'False' 

是否有一些方法來搜索我失蹤的嵌套循環?

+0

可以改寫爲'回[STR(布爾(內[3]))在CATA內]' – mata

+0

您在返回字符串''真''和'False'而不是布爾值'True'和'False'。你確定這是你想要的嗎? – BioGeek

回答

3

您是return從函數,這基本上意味着你不評估每個元素。

除此之外for inner_2 in inner[3]:不會做你想做的,因爲它不會空列表執行(它沒有元素,雖然重複!)。你可以做的是仔細檢查每個列表和yieldinner[3]的thuth岬:

def myfunc(cata): 
    for inner in cata: 
     yield bool(inner[3]) 

yield ING將使得功能可以遍歷發電機,並返回結果:

for i in myfunc(cata): 
    print(i) 

打印:

True 
False 

當然,這可以很容易地轉化到存儲結果的列表理解:

r = [bool(x[3]) for x in cata] 

隨着r現在持有:

[True, False] 
+0

謝謝。另外,如果我想將列表中的數字相加,我是否可以在cata中使用'r = [int(x [3])x? –

+0

@SabafapBing,你可以使用sum(x [3])來對數字進行求和,int()不能把一個列表作爲參數。 – mata