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个元素.
这对你有用吗?
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)
使用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的测试用例列表,以涵盖空单和单例列表.)