2016-12-18 69 views
-2
lists = [['12','saw'],['12','dan'],['16','man']] 

contain = [] 

def foo(y, x): 
    host = [item[0].lower() for item in y] 
    unique_labels = [] 
    for item, count in collections.Counter(host).items(): 
     if count == 1: 
      unique_labels.append(item) 
      x = [item for item in y if item[0] in unique_labels] 
    return x 

foo(lists,contain) 
print contain #returns an empty list instead of a list of lists 

嗨,我有這個函數,它會根據一定的條件獲取一個列表的列表並返回一個列表的新列表。但是,當我調用該函數並嘗試查看列表的新列表時,它將返回空列表。我不明白爲什麼「包含」是空的。任何幫助將不勝感激Python我的功能不斷返回一個空的列表

+1

因爲你實際上沒有改變你傳入的列表;有時你用一個新的替換它,然後你返回它,但你對返回的內容不做任何事情。返回*或*變異。 – jonrsharpe

+0

@jonrsharpe謝謝回覆,但我仍然是初學者,我不知道如何去'返回或變異'。任何幫助,將不勝感激。 – zuse

+1

然後我會推薦一些研究,例如見http://stackoverflow.com/q/26027694/3001761 – jonrsharpe

回答

0

列表contain開始爲空,你永遠不會修改它,所以它打印時它是空的。函數foo接收contain作爲參數x的參數。 Foo不會爲參數添加任何內容。相反,它重複名稱x重新綁定到新列表,然後返回最後一個新列表。您的代碼會忽略返回的列表,並將其刪除。

如果foo是爲了填補在輸入參數x,它應該有x.appendx.extend電話和從未重新綁定與x = ...