Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建用于比较不相等列表的函数_Python_Python 3.x - Fatal编程技术网

Python 创建用于比较不相等列表的函数

Python 创建用于比较不相等列表的函数,python,python-3.x,Python,Python 3.x,背负 我想创建一个函数来比较两个列表: def test(a,b): c=[] for item in b: if item in a: return c[item] 上面的函数给了我一个错误:如果我定义and和b,列表索引超出范围: a=[2,3,5,8] b=[4,5,6,9,8] 为什么会出现这种情况?您试图访问c中不存在的项。 尝试运行此命令并查看您的输出: a=[2,3,5,8] b=[4,5,6,9,8] c=['a', 'b

背负

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

def test(a,b):
    c=[]
    for item in b:
        if item in a:
            return c[item]
上面的函数给了我一个错误:如果我定义and和b,列表索引超出范围: a=[2,3,5,8] b=[4,5,6,9,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])
你可以从c得到第5项和第8项——“f”和“i”。
如果这些元素存在,这非常有效,但如果它们不存在,效果就不太好了。

对于您的算法,您的列表将需要相同的长度。但是,您完全可以对其进行改进,以比较可变长度列表。

您的代码存在一些问题:

  • c[项目]
    将引用
    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[项目]
    被计算为
    c[5]
    ,并且没有这样的索引。现在有意义了。感谢您将其分解。有没有办法在for语句中包含一个唯一的语句,使其不会与c中的数字重复?请尝试将if语句更改为:
    if(a中的项)和(c中的项):
    我尝试过使用set(b),这很有效,但也希望了解if和方法。谢谢你,内森!