2017-08-29 33 views
-4

捎带上this question创建函数比较不等名单

我想创建一个函数来比较两个列表:

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

列表必须具有相同的长度 –

+2

示例:'c [item]'被评估为'c [5]',并且没有这样的索引。 – alfasin

回答

1

有你的代码的几个问题:

  1. c[item]将引用c列表“项”指标。它不会像您打算的那样将“item”的值添加到列表中。例如:5是两个列表中的第一个共同值。 c[5]引用c数组中不存在的第6个元素;因此你的错误。

  2. 您正在使用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]

+0

现在有道理。感谢您打破这一点。 – GenXeral

+0

有没有办法在for语句中包含一个唯一的语句,它不会在c中重复数字? – GenXeral

+0

试着改变if语句为: 'if(item in a)and(item not in c):' –

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 - 'f' 和 'i' 的从C。 如果这些元素存在,这很有用,但如果不存在,则不会太多。

0

对于您的算法,您的列表将需要相同的长度。但是你可以改进它来比较可变长度列表。