Python - 过滤两个列表中对应相同索引的不同元素


索引是指元素在列表中的特定位置。两个列表的不同元素是指那些索引在两个列表中元素不匹配的索引。在 Python 中,我们有一些内置函数,如 enumerate()、zip()、filter() 等,可以用来过滤两个列表中对应相同索引的不同元素。

让我们来看一个例子

给定列表,

lst_1 = [10, 20, 30, 40, 50]

lst_2 = [1, 20, 3, 40, 50]

那么最终结果将是 [20, 40, 50],这些元素来自列表,与对应的相同索引匹配。

语法

以下语法在示例中使用 -

enumerate()

enumerate() 是 Python 中的内置函数,它允许跟踪循环迭代。

zip()

zip() 是 Python 中的内置函数,它接受任何类型的参数 - 列表、元组、字典、集合等等。

filter()

当我们需要根据特定条件过滤项目时,会应用 filter() 方法。简单来说,它允许用户迭代那些被提取出来满足要求的元素。

lambda

Python 中的这个 lambda 函数被称为匿名函数。当需要函数对象时,可以使用它。

list()

list() 是 Python 的内置函数,它创建列表对象,接受可迭代结构,并将其转换为列表。

range()

range() 是 Python 中的内置函数,它返回给定范围内的元素序列。默认情况下,初始范围始终从 0 开始,并通过分配特定范围结束。

append()

Python 中的 append 方法用于在列表末尾添加元素。

使用 enumerate() 函数

该程序使用内置函数 enumerate() 来跟踪两个列表的迭代,方法是接受一个名为 zip 的参数。这两个函数都用于过滤两个列表中的不同元素,并找到对应的相同索引以打印结果。

示例

在以下示例中,开始创建两个输入列表以在变量 - list1 和 list2 中设置随机整数。然后它将使用列表推导式,其中 for 循环和 if 语句与 enumerate() 和 zip() 函数一起在一行中执行。所有这些过程都存储在变量 res 中。最后,我们借助 str(res) 打印结果。

Open Compiler
# initialize lists list1 = ["abc", "bcd", "c", "d"] list2 = ["g", "b", "s", "d"] # using list comprehension and enumerate() res = [i for i, (val1, val2) in enumerate(zip(list1, list2)) if val1 != val2] # result print print("Unequal index elements in lists : " + str(res))

输出

 Unequal index elements in lists : [0, 1, 2]

使用 filter() 和 lambda 函数

该程序使用内置函数 filter() 来删除不同的元素,并且使用内置函数 lambda 将计算两个列表中的对应元素。

示例

在以下示例中,我们首先将在变量 - l1 和 l2 中创建两个列表。然后使用内置函数list(),它接受可迭代结构filter()。filter() 接受两个参数 - lambda(检查两个列表的对应相同索引)和zip(组合两个列表以进行迭代),并将新的过滤元素存储在变量 calc 中。接下来,创建列表推导式以将新元素列表存储在变量 result 中。然后借助变量 result 打印结果。

Open Compiler
L1 = [11, 2, 3, 4, 5] L2 = [1, 2, 3, 6, 5] calc = list(filter(lambda x: x[0] == x[1], zip(L1, L2))) result = [x[0] for x in calc] print("The corresponding same index from two lists:",result)

输出

 The corresponding same index from two lists: [2, 3, 5]

Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.

使用 for 循环

该程序使用 for 循环迭代第一个列表,并使用 if 语句检查两个列表等价的条件,并使用内置函数 append() 返回结果。

示例

在以下示例中,我们将通过创建两个列表并分别存储在相应的变量中即 l1 和 l2 来启动程序。然后在变量 result 中使用空列表[],它将存储包含来自两个字典的对应匹配项的列表。现在它将使用 for 循环,其中变量 i 使用内置函数 - range()len() 迭代第一个列表,即 l1。使用 if 语句,它将检查 l1 和 l2 之间模式匹配的条件。如果找到匹配项,则它将通过 append() 函数返回过滤列表结果。最后,我们借助名为result的变量打印输出。

Open Compiler
# create the item list l1 = [1, 20, 3, 40, 5] l2 = [1, 2, 30, 6, 5] result = [] for i in range(len(l1)): if l1[i] == l2[i]: result.append(l1[i]) print("The corresponding same index from two lists:", result)

输出

 The corresponding same index from two lists: [1, 5]

使用 Zip 和列表推导式

该程序使用内置函数 zip(),它允许迭代两个以上的列表,并在 if 语句中使用等于“==”运算符,它将检查对应的相同索引。

示例

在以下示例中,通过初始化两个变量 - list_1list_2 来存储输入列表来启动程序。然后使用列表推导式创建一个新的列表 result,其中包含两个列表中索引相同位置相等的元素。zip 函数用于连续迭代两个列表。列表推导式内部的if 语句检查两个列表中相同索引处的元素是否相等。如果相等,则将该元素添加到变量result中。最后,借助名为 result 的变量打印输出。

Open Compiler
# input list list_1 = [1, 2, 3, 4, 5] list_2 = [1, 2, 9, 6, 5] # using zip inside the list comprehension result = [x for x, y in zip(list_1, list_2) if x == y] print("The corresponding same index from two lists:", result)

输出

 The corresponding same index from two lists: [1, 2, 5]

使用简单的列表推导式

该程序使用列表推导式,其中循环和条件表达式在一行中定义,以过滤两个列表中的不同元素。

示例

在以下示例中,在变量 - lst_1lst_2 中创建两个输入列表,这些列表将用于过滤两个列表中的不同元素。然后使用列表推导式技术,其中变量 i 使用内置函数len()range() 迭代第一个列表。接下来,if 语句检查两个列表之间匹配的条件,以计算对应的相同索引,并在变量 res 中返回过滤结果。最后,它借助名为res的变量打印结果。

Open Compiler
# input list lst_1 = [100, 200, 300, 400, 500] lst_2 = [100, 2, 300, 6, 50] # list comprehension res = [lst_1[i] for i in range(len(lst_1)) if lst_1[i] == lst_2[i]] print("The corresponding same index from two lists:", res)

输出

The corresponding same index from two lists: [100, 300]

结论

我们讨论了解决上述问题陈述的各种方法。过滤不同元素会删除在两个列表中都未发现相似的那些元素。这些程序通常用于各种应用程序,例如数据分析、数据同步、过滤搜索结果和协同过滤。

更新于:2023年8月16日

373 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告