使用python生成一个点阵

时间:2014-04-11 12:44:38

标签: python itertools

如何生成类似

的内容
[(), (1,), (1,2), (1,2,3)..., (1,2,3,...n)]

[(), (4,), (4,5), (4,5,6)..., (4,5,6,...m)]

然后把它们的产品合并到

[(), (1,), (1,4), (1,4,5), (1,4,5,6), (1,2), (1,2,4)....(1,2,3,...n,4,5,6,...m)]

对于前两个列表,我已在https://docs.python.org/2/library/itertools.html#recipes中尝试了powerset配方,但会有一些我不想要的内容,例如(1,3), (2,3)

对于我使用chainproduct进行过测试的产品,但我无法将元组组合合并为一个。

知道如何做到这一点干净整洁吗?谢谢!

3 个答案:

答案 0 :(得分:1)

请注意,单个元素元组的表示方式如下(1,)

a = [(), (1,), (1, 2), (1, 2, 3)]
b = [(), (4,), (4, 5), (4, 5, 6)]

from itertools import product
for item1, item2 in product(a, b):
    print item1 + item2

<强>输出

()
(4,)
(4, 5)
(4, 5, 6)
(1,)
(1, 4)
(1, 4, 5)
(1, 4, 5, 6)
(1, 2)
(1, 2, 4)
(1, 2, 4, 5)
(1, 2, 4, 5, 6)
(1, 2, 3)
(1, 2, 3, 4)
(1, 2, 3, 4, 5)
(1, 2, 3, 4, 5, 6)

如果你想在列表中使用它们,你可以使用像这样的列表理解

from itertools import product
print [sum(items, ()) for items in product(a, b)]

甚至更简单,

print [items[0] + items[1] for items in product(a, b)]

答案 1 :(得分:0)

如果您不想使用任何特殊进口商品:

start = 1; limit = 10
[ range(start, start + x) for x in range(limit) ]


start = 1输出为:
[[], [1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7], [1, 2, 3, 4, 5, 6, 7, 8], [1, 2, 3, 4, 5, 6, 7, 8, 9]]

如果您想购买该产品,可能使用itertools可能是最优雅的。

答案 2 :(得分:0)

你可以这样试试,

>>> a=[(), (1,), (1,2), (1,2,3)]
>>> b=[(), (4,), (4,5), (4,5,6)]
>>> for ix in a:
...   for iy in b:
...      print ix + iy
... 
()
(4,)
(4, 5)
(4, 5, 6)
(1,)
(1, 4)
(1, 4, 5)
(1, 4, 5, 6)
(1, 2)
(1, 2, 4)
(1, 2, 4, 5)
(1, 2, 4, 5, 6)
(1, 2, 3)
(1, 2, 3, 4)
(1, 2, 3, 4, 5)
(1, 2, 3, 4, 5, 6)