Python 修改的Cartesti两个列表的乘积,其中所有结果元组中的每个元素都是不同的

Python 修改的Cartesti两个列表的乘积,其中所有结果元组中的每个元素都是不同的,python,combinations,permutation,itertools,cartesian-product,Python,Combinations,Permutation,Itertools,Cartesian Product,如果我有两个列表,例如: list1 = [1,2,3] list2 = [1,2] 我想得到如下输出: new_list = [(1,0),(2,0),(2,1),(3,0),(3,1)] 这是笛卡尔乘积减去两个点中具有相同元素的元组(1,1)。我可以通过使用itertools获得笛卡尔积,然后通过循环删除任何没有不同元素的元组来生成它,但这似乎非常低效。Imho列表理解速度与itertools.product方法类似 list1 = [1, 2, 3, 4] list2 = [1, 2,

如果我有两个列表,例如:

list1 = [1,2,3]
list2 = [1,2]
我想得到如下输出:

new_list = [(1,0),(2,0),(2,1),(3,0),(3,1)]

这是笛卡尔乘积减去两个点中具有相同元素的元组
(1,1)
。我可以通过使用
itertools
获得笛卡尔积,然后通过循环删除任何没有不同元素的元组来生成它,但这似乎非常低效。

Imho列表理解速度与
itertools.product
方法类似

list1 = [1, 2, 3, 4]
list2 = [1, 2, 5]

x = [(i, j) for i in list1 for j in list2 if i != j]

print(x)
虽然您没有指定,但if
list1
list2
元素是唯一的。如果不是这样,你应该使用

list1 = [1, 2, 3, 1]
list2 = [1, 2, 5, 2]

x = [(i, j) for i in set(list1) for j in set(list2) if i != j]

防止生成的元组重复。

看来,您想要的输出不是没有
(i,i)
元组的两个列表的笛卡尔乘积。请编辑您的问题。标题和所需输出不匹配。我编辑了标题。如前所述,所需输出是笛卡尔乘积的修改。