使用python生成晶格

使用python生成晶格,python,itertools,Python,Itertools,如何生成类似于 [(), (1,), (1,2), (1,2,3)..., (1,2,3,...n)] 及 然后取它们的乘积并合并到 [(), (1,), (1,4), (1,4,5), (1,4,5,6), (1,2), (1,2,4)....(1,2,3,...n,4,5,6,...m)] ? 对于前两个列表,我在中尝试了powerset配方,但会有一些我不想要的,比如(1,3)、(2,3) 对于我用chain和product测试过的产品,我只是不能将元组的组合合并成一个 你知道怎么做才

如何生成类似于

[(), (1,), (1,2), (1,2,3)..., (1,2,3,...n)]

然后取它们的乘积并合并到

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

对于前两个列表,我在中尝试了powerset配方,但会有一些我不想要的,比如
(1,3)、(2,3)

对于我用
chain
product
测试过的产品,我只是不能将元组的组合合并成一个


你知道怎么做才能干净漂亮吗?谢谢

请注意,单元素元组是这样表示的
(1,)

输出

()
(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)]

如果您不想使用任何特殊导入:

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

使用
start=1
时,输出为:

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

你可以这样尝试

>>> 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)

只是吹毛求疵,一个元素元组被写成
(4,)
。此外,如果要合并,可能需要使用
set
元素而不是元组。这些列表是否意味着无止境?您可能需要分解问题。例如:-创建一个函数,生成从x开始的元组,长度为n(范围不太难)-创建一个函数,生成从x开始的元组长度为m的列表(第一个函数不难)-创建一个函数,合并2个元组(set不难)-创建一个将元组与元组列表合并的函数(与上一个函数相比应该不难。)@filmor抱歉,我忘了在元组末尾添加逗号!@ScottHunter只是为了表示应该通过变量之类的方式指定列表的结尾。抱歉,我忘了逗号!@Joyee没关系:)如果你觉得我的回答对你有帮助,你可以。
start = 1; limit = 10
[ range(start, start + x) for x in range(limit) ]
>>> 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)