在列表中查找相同或相似的序列

时间:2011-11-24 10:03:29

标签: wolfram-mathematica

如果列表有两个具有特定属性的非重叠序列,我需要将列表转换为空列表。例如。在这种情况下,等于并且长度> = 2)

mm[{___, b1__, ___, b1__, ___}] := {} /; Length[{b1}] >= 2

或者,例如2个子列表,相似度函数等于0和 Legth = 4

mm[{___, b1__, ___, b2__, ___}] := {} /;
NeedlemanWunschSimilarity[{b1}, {b2}] == 0 && Length[{b1}] == 4 &&
Length[{b2}] == 4

依旧.....

对于mathematica,知道内部算法的大师,有更快的 或许,使用PatternTest(?)?

1 个答案:

答案 0 :(得分:4)

我等待更全面地描述你在做什么,但同时:

mm2[{___, b1 : Repeated[_, {4}], ___, b2 : Repeated[_, {4}], ___}] := {} /; 
  NeedlemanWunschSimilarity[{b1}, {b2}] == 0

这使用Repeated来仅测试正确长度的序列。

您可以使用Repeated[_, {min, max}]指定最小和最大序列长度。