比较Python中两个列表的每个项目

Ham*_*uel 2 python

例如,假设list_1 = [a,b,c]list_2 = [m,n,o].我想将一个列表中的每个项目与另一个列表进行比较,例如,创建一个输出列表

[a == m, a == n, a == o, b == m, b == n, b == o...]

为简单起见,我正在使用该==操作,但这也可以是一个求和,例如

[a + m, a + n, a + o, b + m...]

我知道如何通过两个循环来实现这一点,但我想知道一个lambda函数map()或列表推导可以使用吗?我在网上搜索过,但只找到了列表项的一对一比较,例如map(lambda x,y: x + y, list_1, list_2).

Roe*_*ven 7

itertools.product()可以为您生成所有组合:

import itertools
list_1 = [1,5,4]
list_2 = [2,3,4]
# using list comprehensions
comparisons = [a == b for (a, b) in itertools.product(list_1, list_2)]
sums = [a + b for (a, b) in itertools.product(list_1, list_2)]
# using map and lambda
comparisons = map(lambda (a, b): a == b, itertools.product(list_1, list_2))
sums = map(lambda (a, b): a + b, itertools.product(list_1, list_2))
Run Code Online (Sandbox Code Playgroud)


jay*_*elm 6

要使用列表推导式获取元素的所有排列:

[a == b for a in list_1 for b in list_2]
Run Code Online (Sandbox Code Playgroud)

功能与嵌套的 for 循环相同:

list_3 = []
for a in list_1:
    for b in list_2:
        list_3.append(a == b)  # Or a + b, etc.
Run Code Online (Sandbox Code Playgroud)

函数式实现有点混乱:

list_3 = map(lambda x: map(lambda y: y == x, list_2), list_1)
Run Code Online (Sandbox Code Playgroud)

但是,这会创建一个列表列表,因此您需要使用此处描述的任何技术将其展平

sum(list_3, [])
Run Code Online (Sandbox Code Playgroud)

或者itertools.product按照@bereal 的建议使用。