2011-06-23 15 views
7

同じオブジェクト(Equal [])のアトミックオブジェクトからなる(おそらく空の)リストに一致するパターンを探していますが、わかりません。どんな助けでも大歓迎です。同一の要素のリストに一致するパターン

+0

パターンでは、正規表現ですか? – Dan

+0

PatternSequenceを使ってみましたか? http://reference.wolfram.com/mathematica/ref/PatternSequence.html –

+1

@Dan I Mathematicaには_patterns_、つまりMathematicaの言語/データ構造をマッチングするための式があり、 'StringExpression'と' RegularExpression'は_strings_ 。赤みはパターンを参照しているようです。 –

答えて

12

応答のすべてのこれまでのように見えます一致するオブジェクトがアトムである必要があるという要件を逸しています。あなたが使用している可能性がEqualの意味で同じを定義しない場合

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

:わずかに変更されたテストリストで

Cases[testList, {(a_?AtomQ) ...}] 

あなたは他の方法が表示されます以下は、この行います要求を失敗してください

testList = {{1, 1.0, 1.0}, {a, b, c}, {Exp[Pi] + 1, Exp[Pi] + 1, Exp[Pi] + 1}, {}, {3}}; 

これらはすべて3番目の要素にも正しく一致しています。

+0

+1を丁寧に読んでください:) –

+0

はい、私は完全にそれを逃した。 –

+0

おかげで、微妙に異なるマッチング動作を持つ3つのバージョンが非常に有益です。 – reddish

9

これは機能しますか?代わりにPatternTest

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

なぜか分かりませんが、私は通常、 '_?(cond)'構文を忘れる傾向があります。それを覚えている素敵な例。 –

6

、:(。と空とシングルトンリストをカバーするテストケースのマークのリストに拡大)

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

関連する問題