使用python避免模式

时间:2015-03-05 21:00:38

标签: python combinatorics

对于序列{6,2,3,1,5,4},我们在右边有相应的图表。对于序列中每增加3个数字:{2,3,5},{2,3,4}。 我们检查它是否遵循左侧的模式。这是一个称为盒装网格图案的组合对象。我的代码目前检查序列是否有3个递增的数字

enter image description here

1 个答案:

答案 0 :(得分:3)

您可以使用以下列表推导来对预期序列进行grub:

>>> [(e1,e2,e3) for i,e1 in enumerate(l) for j,e2 in enumerate(l[i+1:],1) for e3 in l[j+i+1:]]
[(6, 2, 3), (6, 2, 1), (6, 2, 5), (6, 2, 4), (6, 3, 1), (6, 3, 5), (6, 3, 4), (6, 1, 5), (6, 1, 4), (6, 5, 4), (2, 3, 1), (2, 3, 5), (2, 3, 4), (2, 1, 5), (2, 1, 4), (2, 5, 4), (3, 1, 5), (3, 1, 4), (3, 5, 4), (1, 5, 4)]

然后你可以使用以下检查元素交替的函数来过滤前面列表理解的结果:

>>> def seq_check(elem):
...   return elem[2]>elem[1]>elem[0]

>>> filter(seq_check,sequences)
[(2, 3, 5), (2, 3, 4)]