2011-01-27 8 views
5

1,1,2,3,1のような整数シーケンスが与えられるたびに、非常に不規則なネストされたリストmyListがあります。ネストされたリストの中で与えられたインデックス配列がmathematicaで有効かどうかをテストする方法

myList[[1,1,2,3,1]] 

が有効です。そうでない場合は、エラーが表示されます。

Part::partw: part... does not exist 

ありがとうございます。あなたが他のアクションのための印刷[偽]を置き換えることができます

+2

これは非常に正当な質問ですが、依然として機能の設計を再検討したいことがあります。特定の部分が存在するという特別なチェックが必要な場合、これは問題または少なくとも現在のそれの定式化が索引ベースのアプローチにうまく対応していないことを意味します。ルールベースでも、他の方法でも問題を完全に排除できます。 –

答えて

3
Quiet[ 
     Check[mylist[[1, 1, 2, 3, 1]], Print[False], Part::partd], 
    Part::partd]; 

...

編集

partdpartwの両方にメッセージをチェックするには構文は次のとおりです。

Quiet[Check[{{{1, 3}}, {2}}[[1, 4, 2, 3, 1]], 
    Print[False], {Part::partd, Part::partw}], 
    {Part::partd, Part::partw}]; 

HTH!

+0

@ belisarius:これは私が一般的に提起した問題を解決しません。以下の簡単な例を参照してください: 'Quiet [Check {{{{1,3}}、{2}} [[1,1,2,3,1]]、Print [False]、 Part :: partd]部品:: partd]; ' –

+0

@ Qiang再確認してください。私のマシンでは正常に動作します。エラー表示としてFalseを表示します。 –

+0

@bekusarius:何が起こったのですか?コピー/ペーストして実行すると、その動作は正しいです。しかし、私が以前に持っていたものを再実行すれば、私はalawysに 'Part :: partw:{{1,3}}のパート4は存在しません。 >> '。私は繰り返し見て、表現が同じであることを発見した。なぜ???以前に定義された変数はここにありません... –

3

偶然、これは数週間前にMathGroupに登場しました。以下は、レイ・クープマン(Ray Koopman)の最後の、そして最良の反応だと私が信じるものへのURLです。

http://forums.wolfram.com/mathgroup/archive/2011/Jan/msg00326.html

また、同じスレッド内の以前の記事へのリンクがあります。

ダニエルLichtblau

Wolfram Researchの

0

ここでそれを行うための別の方法です。

Quiet[MemberQ[#, #[[1, 4, 2, 3, 1]], Infinity] &[{{{1, 3}}, {2}}]] 

戻り値False。

この位置にある要素(存在する場合)がリストにあるかどうかを確認した後、本質的にtrueまたはfalseを返します。

Quiet[MemberQ[#, #[[1, 1, 2]], Infinity] &[{{{1, 3}}, {2}}]] 

Trueを返します。

ブリサリウスの答えは、より低レベルのコントロールを提供します。

関連する問題