我正在寻找一个匹配(可能是空的)列表的模式,该列表由相同的(在Equal []意义上的)原子对象组成,但我无法弄明白。任何帮助将不胜感激。
答案 0 :(得分:12)
到目前为止,所有回复似乎都错过了匹配对象需要原子的要求。以下是:
Cases[testList, {a___?AtomQ} /; Equal[a]]
如果你没有定义相同的,你可以使用Equal
:
Cases[testList, {(a_?AtomQ) ...}]
通过略微修改的测试列表,您将看到其他方法未能满足要求
testList = {{1, 1.0, 1.0}, {a, b, c}, {Exp[Pi] + 1, Exp[Pi] + 1, Exp[Pi] + 1}, {}, {3}};
它们也都错误地匹配第3个元素。
答案 1 :(得分:9)
这对你有用吗?
testList = {
{1, 1.0, 1.},
{a, b, c},
{0, Exp[Pi*I] + 1.0, Sin[Pi]}
}
Cases[testList, _List?(Equal @@ # &)]
答案 2 :(得分: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}}
(并扩展Mark的测试用例列表以涵盖空单和单例列表。)