模式匹配相同元素的列表

red*_*ish 7 wolfram-mathematica pattern-matching

我正在寻找一个匹配一个(可能是空的)列表的模式,该列表由相同的(在Equal []意义上)原子对象组成,但我无法弄明白.任何帮助将不胜感激.

Sjo*_*ies 12

到目前为止,所有的响应似乎都错过了匹配的对象需要是原子的要求.以下是这样的:

Cases[testList, {a___?AtomQ} /; Equal[a]]
Run Code Online (Sandbox Code Playgroud)

如果你没有定义相同的意义,Equal你可以使用:

Cases[testList, {(a_?AtomQ) ...}]
Run Code Online (Sandbox Code Playgroud)

通过略微修改的测试列表,您将看到其他方法无法满足要求

testList = {{1, 1.0, 1.0}, {a, b, c}, {Exp[Pi] + 1, Exp[Pi] + 1, Exp[Pi] + 1}, {}, {3}};
Run Code Online (Sandbox Code Playgroud)

他们都错误地匹配第3个元素.


Mar*_*ure 9

这对你有用吗?

testList = {
  {1, 1.0, 1.},
  {a, b, c},
  {0, Exp[Pi*I] + 1.0, Sin[Pi]}
}
Cases[testList, _List?(Equal @@ # &)]
Run Code Online (Sandbox Code Playgroud)


Bre*_*ion 6

使用Condition,而不是PatternTest:

In[31]:= testList = {{1, 1.0, 1.}, {a, b, c}, {0, Exp[Pi*I] + 1.0, 
    Sin[Pi]}, {}, {3}};

Cases[testList, {a___} /; Equal[a]]

Out[32]= {{1, 1., 1.}, {0, 0., 0}, {}, {3}}
Run Code Online (Sandbox Code Playgroud)

(并扩展Mark的测试用例列表,以涵盖空单和单例列表.)