2014-06-20 44 views
5

這是實踐例子:Python列表減法

寫一個函數(list1, list2),在兩個列表需要作爲參數,並返回一個列表,是去除list1元素,可以在list2發現的結果。

爲什麼此函數返回[1, 3, 4]而不是[4]正如我以爲會這樣?我認爲這與list1.remove()有關。我想這是顯而易見的,但我看不到它。

它適用於這些例子:

subtractList (['a', 'b', 'c', 'd'], ['x', 'y', 'z']) = 
    ['a', 'b', 'c', 'd'] 

subtractList([1,2,3,4,5], [2, 4]) = 
    [1, 3, 5] 

,但未能在此:

subtractList(range(5), range(4)) 

而且我注意到它從列表中刪除僅偶數。

下面是代碼:

def subtractList(list1,list2): 
    list1 = list(list1) 
    list2 = list(list2) 

    for i in list1: 
     if i in list2: 
      list1.remove(i) 

    return list1 

我已經解決了這個做法有:

def subtractList(list1,list2): 

    new_list = [] 

    list1 = list(list1) 
    list2 = list(list2) 

    for i in list1: 
     if i not in list2: 
      new_list.append(i) 

    return new_list 
+4

請修復您的格式,尤其是你的壓痕。現在它很難幫助你。 – Ffisegydd

+0

你在使用Python 3還是Python 2? – Ffisegydd

+0

此外,由於您已經通過列表(範圍(x)也是一個列表),將它們再次變成列表('list1 = list(list1)')是不必要的 – thumbtackthief

回答

4

改變,因爲你迭代就會造成問題的列表。你的第二個解決方案是體面的,或者你可以查看「列表解析」。在這種情況下:

new_list = [num for num in list1 if num not in list2] 
+0

對於Python新手來說,我不認爲導致錯誤的原因是一些顯而易見的東西:) – thumbtackthief

4

通過作弊的方式打動你的教授:

def subtract_list(l1, l2): 
    return list(set(l1) - set(l2)) 
+0

是的,我也想過設置大聲笑 – Jasko

+0

這可能會改變list1的順序。 – dawg