2011-06-23 54 views
7

我正在寻找一个匹配由相同(等于[])原子对象意义组成的列表(可能为空)的模式,但我无法弄清楚。任何帮助将不胜感激。匹配相同元素列表的模式

+0

按照模式,你的意思是正则表达式吗? – Dan

+0

您是否尝试过使用PatternSequence? http://reference.wolfram.com/mathematica/ref/PatternSequence.html –

+1

@丹I Mathematica有_patterns_,即用于匹配Mathematica语言/数据结构的表达式,以及用于_strings_的'StringExpression'和'RegularExpression' 。红色似乎指的是模式。 –

回答

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

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

+0

+1请仔细阅读:) –

+0

哎呀。是的,我完全错过了。 –

+0

谢谢,你的三个版本具有微妙的不同匹配行为,非常具有启发性。 – reddish

9

这是否适合您?

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

我不知道为什么,但我通常会忘记'_?(cond)'语法。记住它的好例子。 –

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

(和扩大的测试用例马克的名单上覆盖空单列表。)