我得到这个错误: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)