给出一个Python元组
products = (a, b, c, d, e, f, g)
我试图从'产品'生成新的元组/列表,但根据具体模式:
所有可能的时间顺序组合,以制作对,例如ab,ac(& so on ...)af,ag,bc等
类似于#1,但是制作三个一组,并确保增量变为“中间”的两侧。产品相同,例如abc,bcd(& so on ...)和 ace,bdf,ceg
四个一组,再次确保增量变化等于中间产品的任何一侧(和之间),例如abcd,bcde(& so on ...)和 aceg
从询问并阅读Python的网站,itertools.combinations()函数似乎朝着正确的方向迈出了一步。但鉴于正在寻求创造的特定模式,似乎不仅仅需要其标准使用形式的功能。有什么建议吗?
P.S。 平均实际元组比上面的例子长几倍(我总共有大约40个元组),以及一些'产品'每个内容都会过期/退出,每隔几周就会添加一个新内容,因此手动将组合输入新元组并不符合自动化的目标。
答案 0 :(得分:2)
这是一种显而易见的懒惰方式:
>>> products = 'abcdefg'
>>> for length in range(2, 5):
for step in range(1, 42):
for start in range(42):
x = products[start : start+length*step : step]
if len(x) == length:
print x,
print
ab bc cd de ef fg ac bd ce df eg ad be cf dg ae bf cg af bg ag
abc bcd cde def efg ace bdf ceg adg
abcd bcde cdef defg aceg
如果您使用正确计算的停止值替换if len(x) == length:
,则可以删除42
检查。
答案 1 :(得分:0)
这是一个单行,其中n
是案例编号:
[ products[i:i+j*n+1:j] for j in xrange(1,len(products)/n+1) for i in xrange(len(products)-j*(n-1)) if i+j*n<len(products) ]