2014-06-20 43 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