Python列表索引Pyschools主题6 q 21

时间:2014-05-26 06:05:32

标签: python list

我试图通过pyschools练习在Python上做得更好,但这个让我感到难过。我的逻辑对我来说非常有意义,但它在某个地方不断在列表中抛出一个超出范围的错误。

这是问题

编写一个函数(list1,list2),它接受两个列表作为参数,并返回一个列表,该列表是从list1中删除可以在list2中找到的元素的结果。

实施例

ubtractList

  
    
      

subtractList(范围(5),范围(4))           [4]       subtractList([1,2,3,4,5],[2,4])           [1,3,5]       subtractList([' a',' b',' c',' d'],[' x', ' y',' z'])           [' a',' b',' c',' d']

    
  

这是我到目前为止所拥有的

def subtractList(list1, list2): 
    if len(list1) > 0:
        for i in range(len(list1)):
            for p in range(len(list2)):
                if list1[i] == list2[p]:
                    list1.remove(list1[i])
    return list1

2 个答案:

答案 0 :(得分:0)

我以为你想学习,所以暂时我会给你一些提示。如果这不是您所期望的,请发表评论,我将编辑此帖并提供代码段。

I REPEAT - 在您投票之前,请求评论片段。

  1. 您可以使用list comprehension轻松完成此操作。这真的很冗长,在这种情况下会这样做,但对于复杂的条件,它可能太难看了。

  2. 请参阅filter()内置函数。请记住,它会返回生成器,因此您可能希望将其传递给list()

  3. 提示:您的条件是“不在list2中的元素”。在第二种情况下,您可以将其嵌入到理解中(在第一种情况下)或包含在lambda或命名函数(正常函数,def等)中。

答案 1 :(得分:0)

因此,关于完成您想要的方法的方法有很多意见/答案,我将向您展示为什么您会收到代码中的错误。

你在这里改变list1

                list1.remove(list1[i])

同时,range(len(list1))来自:

    for i in range(len(list1)):

保持相同的列表,例如,从一开始它的长度为list1