我正在使用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")]
答案 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')]