我想创建一个函数来比较两个列表:
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]
为什么会出现这种情况?
我想创建一个函数来比较两个列表:
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]
为什么会出现这种情况?
有你的代码的几个问题:
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]
。
您正在尝试访问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 - 'f' 和 'i' 的从C。 如果这些元素存在,这很有用,但如果不存在,则不会太多。
对于您的算法,您的列表将需要相同的长度。但是你可以改进它来比较可变长度列表。
列表必须具有相同的长度 –
示例:'c [item]'被评估为'c [5]',并且没有这样的索引。 – alfasin