我试图通过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
答案 0 :(得分:0)
我以为你想学习,所以暂时我会给你一些提示。如果这不是您所期望的,请发表评论,我将编辑此帖并提供代码段。
I REPEAT - 在您投票之前,请求评论片段。
您可以使用list comprehension轻松完成此操作。这真的很冗长,在这种情况下会这样做,但对于复杂的条件,它可能太难看了。
请参阅filter()
内置函数。请记住,它会返回生成器,因此您可能希望将其传递给list()
提示:您的条件是“不在list2中的元素”。在第二种情况下,您可以将其嵌入到理解中(在第一种情况下)或包含在lambda
或命名函数(正常函数,def
等)中。
答案 1 :(得分:0)
因此,关于完成您想要的方法的方法有很多意见/答案,我将向您展示为什么您会收到代码中的错误。
你在这里改变list1
:
list1.remove(list1[i])
同时,range(len(list1))
来自:
for i in range(len(list1)):
保持相同的列表,例如,从一开始它的长度为list1
。