Pyschools主题6第21季度的Pyschools索引中的Python列表

2024-05-19 12:51:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过pyschools练习来提高Python的水平,但这一次总是让我左右为难。我的逻辑对我来说很有道理,但在某个地方它总是在列表中抛出一个越界错误。在

问题就在这里

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

示例

分包商

subtractList(range(5), range(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

Tags: in列表forlenif地方水平range
2条回答

我以为你想学,所以现在我给你一些提示。如果这不是你所期望的,评论一下,我会编辑这篇文章并提供一个代码片段。在

我重复一下-在你投否决票之前,在评论中征求一个片段。在

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

  2. 请参见^{}内置函数。请记住,它返回generator,因此您可能需要将其传递给list()

提示:您的条件是“元素不在列表2中”。您可以将其嵌入到comprehension中(在第一种情况下),或者在第二种情况下封装在lambda或命名函数(普通函数,带有def等)中。在

所以,有很多关于完成你想要的东西的方法的评论/答案,我要告诉你为什么你的代码会出现错误。在

您正在变异list1这里:

                list1.remove(list1[i])

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

^{pr2}$

保持相同的列表,如中所示,它从一开始就具有list1的长度。在

相关问题 更多 >