【发布时间】:2020-11-29 08:09:19
【问题描述】:
我认为我列出了一个不好的例子,对此我深表歉意,已经用另一个例子重新编辑了这个,请看这个版本。
我知道有一个非常相似的问题:Itertools product without repeating duplicates
但我有一些不同。例如:
a = ['add', 'sub']
b = [2,3, 'a', 'b']
c = [1,3, 'a', 'c']
list(it.product(a, b, c)) # result is:[('add', 2, 1),('add', 2, 3),('add', 2, 'a'), ('add', 2, 'c'),
#('add', 3, 1),('add', 3, 3),('add', 3, 'a'),('add', 3, 'c'),('add', 'a', 1),('add', 'a', 3),
#('add', 'a', 'a'),('add', 'a', 'c'), ('add', 'b', 1),('add', 'b', 3),('add', 'b', 'a'),
#('add', 'b', 'c'),('sub', 2, 1),('sub', 2, 3),('sub', 2, 'a'),('sub', 2, 'c'),('sub', 3, 1),
#('sub', 3, 3),('sub', 3, 'a'),('sub', 3, 'c'),('sub', 'a', 1),('sub', 'a', 3),('sub', 'a', 'a'),
#('sub', 'a', 'c'),('sub', 'b', 1),('sub', 'b', 3),('sub', 'b', 'a'),('sub', 'b', 'c')]
结果:
我不想要 add(a,a),因为第一个值 == 第二个值
我只想保留 add(3,a) add(a,3) 中的 1 个,因为它是对称的。
我的示例只包含两个列表,但我可以使用 5 个或更多列表来生成产品。
我不能使用组合,因为:
product(['add', 'sub', 1,2,3, 'a','b', 'c'], repeat=3) 与 product(['add', 'sub' ], [2,3, 'a', 'b'], [1,3, 'a', 'c'])
product(['add', 'sub', 1,2,3, 'a','b', 'c'], repeat=3) 中的某些东西不适合我。
我想要一个快速的方法,因为我的程序对时间敏感。
有人可以帮忙吗?
【问题讨论】:
-
总是只有两个列表吗?
-
高效的过程是创建自己的生成器:stackoverflow.com/questions/19744542/… 和 stackoverflow.com/questions/19754499/… 的组合
-
有些人不知道,请在您的帖子中编辑。
-
我认为我列出了一个不好的例子,对此我深表歉意,已经用另一个例子重新编辑了这个,请看这个版本。