使用Python生成晶格
如何生成类似于
[(), (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)]
呢?
对于前两个列表,我尝试过在这个链接中的幂集方法,但结果中会有一些我不想要的组合,比如(1,3), (2,3)
。
在生成组合时,我用过chain
和product
,但是我就是无法把这些元组的组合合并成一个。
有没有什么好的方法可以做到这一点呢?谢谢!
3 个回答
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
会是最优雅的选择。
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)
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)]