如果列表有两个具有特定属性的非重叠序列,我需要将列表转换为空列表。例如。在这种情况下,等于并且长度> = 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(?)?
答案 0 :(得分:4)
我等待更全面地描述你在做什么,但同时:
mm2[{___, b1 : Repeated[_, {4}], ___, b2 : Repeated[_, {4}], ___}] := {} /;
NeedlemanWunschSimilarity[{b1}, {b2}] == 0
这使用Repeated
来仅测试正确长度的序列。
您可以使用Repeated[_, {min, max}]
指定最小和最大序列长度。