查找两个大小不同的 Python 无序列表的匹配元素

Find matching elements of two unordered Python lists of different sizes

我收到此错误:index out of range, in if largerList[j] == smallerList[i]。我正在做一个关于二叉搜索树的作业,我把树放入列表中,我只是想比较两个列表:

def matchList(largerList, smallerList) :
        matches = []
        for i in smallerList:
            for j in largerList:
                if largerList[j] == smallerList[i] :
                    matches[i] = smallerList[i]
        return matches

我假设嵌套的 for 循环应该完全迭代每个循环中的所有元素,所以 smallerList 是较小的列表,因此 smallerList 不会使 largerList 超出范围.内部 for 循环应该完全遍历所有较大的列表,将每个值与较小列表的每个元素进行比较。为什么不起作用?

如果 matches 中不存在该索引,则无法使用 matches[i] 设置列表值。

尝试附加:

将此 matches[i] = smallerList[i] 更改为此 matches = matches.append(smallerList[i])

尝试在这样的列表中查找匹配元素效率很低。您可以改进的一件事是使用列表理解:

matches = [i for i in largerList if i in smallerList]

但是在数学上更明智的方法仍然是认识到我们有两组元素并且我们想要找到两组的交集所以我们可以这样写:

matches = set(largerList).intersection(smallerList)