我有四组(在本例中为a-d),我想迭代所有组合的限制,你只能从每组中选择一个元素,你需要从所有组中选择一个。在四组的情况下,你可以简单地做这样的事情:
for a in (1,2):
for b in (3,4):
for c in (5,6):
for d in (7,8):
print(a,b,c,d)
预期的输出是:
1 3 5 7
1 3 5 8
1 3 6 7
1 3 6 8
1 4 5 7
1 4 5 8
1 4 6 7
1 4 6 8
2 3 5 7
2 3 5 8
2 3 6 7
2 3 6 8
2 4 5 7
2 4 5 8
2 4 6 7
2 4 6 8
我怎样才能为n-sets重写这个?
我希望像itertools.combinations()
这样的东西。或者迭代n维数组。可能是nympy有东西吗?
由于
答案 0 :(得分:1)
以下是numpy
解决方案:
a = tuple(np.arange(x,x+2) for x in range(0,8,2))
a
# (array([0, 1]), array([2, 3]), array([4, 5]), array([6, 7]))
for x,y,z,u in np.broadcast(*np.ix_(*a)):
print(x,y,z,u)
# 0 2 4 6
# 0 2 4 7
# 0 2 5 6
# 0 2 5 7
# 0 3 4 6
...
答案 1 :(得分:0)
正如Paul Panzer在评论中所建议的那样。这是itertools.product(),示例如下所示:
import itertools
for p in itertools.product((1,2), (3,4), (5,6), (7,8)):
print(p)
(1, 3, 5, 7)
(1, 3, 5, 8)
(1, 3, 6, 7)
(1, 3, 6, 8)
(1, 4, 5, 7)
(1, 4, 5, 8)
(1, 4, 6, 7)
(1, 4, 6, 8)
(2, 3, 5, 7)
(2, 3, 5, 8)
(2, 3, 6, 7)
(2, 3, 6, 8)
(2, 4, 5, 7)
(2, 4, 5, 8)
(2, 4, 6, 7)
(2, 4, 6, 8)