Wolfram mathematica 匹配相同元素列表的模式

Wolfram mathematica 匹配相同元素列表的模式,wolfram-mathematica,pattern-matching,Wolfram Mathematica,Pattern Matching,我正在寻找一种模式,该模式匹配由相同(在相等[]的意义上)原子对象组成的(可能为空)列表,但我无法找到它。非常感谢您的帮助。这对您有用吗 testList = { {1, 1.0, 1.}, {a, b, c}, {0, Exp[Pi*I] + 1.0, Sin[Pi]} } Cases[testList, _List?(Equal @@ # &)] 使用条件,而不是模式测试: In[31]:= testList = {{1, 1.0, 1.}, {a, b, c}, {0

我正在寻找一种模式,该模式匹配由相同(在相等[]的意义上)原子对象组成的(可能为空)列表,但我无法找到它。非常感谢您的帮助。

这对您有用吗

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

使用
条件
,而不是
模式测试

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的测试用例列表上扩展,以涵盖空的和单例的列表。)

到目前为止,所有的响应似乎都没有满足被匹配对象需要是原子的这一要求。以下是这样做的:

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}};

它们也都不正确地匹配第三个元素。

所谓模式,是指正则表达式吗?您尝试过使用模式序列吗@Dan I Mathematica具有模式,即用于匹配Mathematica语言/数据结构的表达式,以及用于字符串的
StringExpression
s和
RegularExpression
s。Reddish似乎指的是模式。我指的是Mathematica模式,而不是regexps。@Ben PatternSequence不满足我的需要。我不知道为什么,但我通常会忘记
(cond)
语法。记住它是一个很好的例子。是的,我完全错过了。谢谢,你的三个版本有着微妙不同的匹配行为,非常有启发性。@reddish别忘了接受你最喜欢的答案。;-)