我想创建一个比较两个列表的函数:
def test(a,b):
c=[]
for item in b:
if item in a:
return c[item]
上面的函数给出了一个错误:列表索引超出范围,如果我定义和b: A = [2,3,5,8] B = [4,5,6,9,8]
为什么会这样?
答案 0 :(得分:1)
您的代码存在一些问题:
c[item]
将引用"项目" c
列表的索引。它不会添加" item"的值。到你想要的列表。例如:5是两个列表中的第一个公共值。 c[5]
引用c
数组中不存在的第6个元素;因此你的错误。
您正在使用return
来结束函数调用,并且只是将c[5]
的值传递给函数的调用者。
尝试以下方法:
def test(a,b):
c=[]
for item in b:
if item in a:
c.append(item)
return c
.append(item)
会将item
的值添加为引用列表末尾的新元素。
循环完成后,该函数现在将按预期返回整个c
列表。
使用a = [2, 3, 5, 8]
和b = [4, 5, 6, 9, 8]
的示例列表,正确调用test(a, b)
返回[5, 8]
。
答案 1 :(得分:0)
您正在尝试访问c中不存在的项目。 尝试运行它,看看你的输出是什么:
a=[2,3,5,8]
b=[4,5,6,9,8]
c=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
for item in b:
if item in a:
print(c[item])
你得到第5项和第8项 - 来自c的'f'和'i'。 如果这些元素存在,这种方法很有效,但如果不存在则不然。
答案 2 :(得分:0)
对于您的算法,您的列表需要具有相同的长度。但你可以肯定地改进它来比较可变长度列表。