列出两个列表之间的所有组合,其中第一个列表的元素小于第二个列表的元素

时间:2019-06-12 18:34:52

标签: python python-3.x list combinations permutation

我正在使用python 3和itertools创建两个列表之间的所有可能组合。但是,我需要添加一个约束,其中每对的第一个元素必须小于第二个元素。

例如:

list1=['A1','A2','C1']
list2=['A1','B1','B2']
result = list(itertools.product(list1, list2))

返回

[("A1", "A1"), ("A1", "B1"), ("A1", "B2"), ("A2", "A1"), ("A2", "B1"), ("A2", "B2"), ("C1", "A1"), ("C1", "B1"), ("C1", "B2")]

在这一点上,我想排除list1的第一个字母大于list2的第一个字母的所有元素。在这种情况下,由于C大于A,B,结果中的最后三个元素将被排除。

所以最终结果等于

[("A1", "A1"), ("A1", "B1"), ("A1", "B2"), ("A2", "A1"), ("A2", "B1"), ("A2", "B2")]

1 个答案:

答案 0 :(得分:1)

为什么在生成元素后不将其过滤掉。本质上,创建产品迭代器,仅选择元素(x,y),其中x < y

result = [(x,y) for x, y in itertools.product(list1, list2) if x < y]

输出将为

[('A1', 'B1'), ('A1', 'B2'), ('A2', 'B1'), ('A2', 'B2')]