两个列表的修正笛卡尔积,其中所有结果元组中的每个元素都是不同的
Modified Cartestian Product of Two Lists Where Each Element in all Resulting Tuples is Distinct
如果我有两个列表,比如:
list1 = [1,2,3]
list2 = [1,2]
我想要得到如下所示的输出:
new_list = [(1,0),(2,0),(2,1),(3,0),(3,1)]
这是笛卡尔积减去在两个点中具有相同元素的元组(1,1)
。我可以通过使用 itertools
获取笛卡尔积然后循环返回以删除任何不具有不同元素的元组来生成它,但这似乎效率很低。
恕我直言,列表理解与 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)
虽然您没有指定,如果 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]
防止重复生成的元组。
如果我有两个列表,比如:
list1 = [1,2,3]
list2 = [1,2]
我想要得到如下所示的输出:
new_list = [(1,0),(2,0),(2,1),(3,0),(3,1)]
这是笛卡尔积减去在两个点中具有相同元素的元组(1,1)
。我可以通过使用 itertools
获取笛卡尔积然后循环返回以删除任何不具有不同元素的元组来生成它,但这似乎效率很低。
恕我直言,列表理解与 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)
虽然您没有指定,如果 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]
防止重复生成的元组。