2011-01-27 4 views
5

में मान्य है या नहीं, मेरे पास एमएमए में एक अत्यधिक अनियमित नेस्टेड सूची myList है, जब भी मुझे एक पूर्णांक अनुक्रम दिया जाता है, जैसे किसी भी लंबाई के 1,1,2,3,1, मैं जानना चाहता हूं कि क्याएक नेस्टेड सूची में यह जांचने के लिए कि किसी दिए गए इंडेक्सिंग अनुक्रम गणित

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

आप किसी भी अन्य कार्रवाई के लिए प्रिंट [झूठी] की जगह ले सकता ...

संपादित

दोनों partd और partw के लिए संदेशों की जांच करने के लिए वाक्य रचना है:

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

एचटीएच!

+0

@ वंश: यह अभी भी सामान्य रूप से उत्पन्न समस्या को हल नहीं करता है। निम्नलिखित सरल उदाहरण देखें: 'शांत [जांचें [{{{1, 3}}, {2}} [[1, 1, 2, 3, 1]], प्रिंट करें [गलत], भाग :: partd], भाग :: partd]; ' –

+0

@Qiang कृपया पुनः जांचें। यह मेरी मशीन में ठीक चलाता है। यह गलत त्रुटि प्रिंट करता है, एक त्रुटि संकेत के रूप में –

+0

@bekusarius: क्या हुआ? अगर मैं इसे कॉपी/पेस्ट और चलाता हूं, तो इसका व्यवहार सही है। लेकिन अगर मैं सिर्फ जो कुछ भी करता हूं उसे फिर से चलाता हूं, तो मुझे 'भाग :: partw: {4 {{3}} का भाग 4 मौजूद नहीं है। >> '। मैंने बार-बार देखा और पाया कि अभिव्यक्ति समान हैं। क्यूं कर??? यहां पहले परिभाषित चर नहीं है ... –

3

संयोग से यह कुछ हफ्ते पहले मैथ ग्रुप पर आया था। नीचे एक यूआरएल है जो मुझे विश्वास है कि आखिरी और सबसे अच्छी प्रतिक्रिया (रे कोओपमन से) थी।

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

यह भी एक ही धागे में पहले पोस्ट के लिंक है।

डैनियल Lichtblau

Wolfram अनुसंधान

0

यहाँ यह ऐसा करने का एक और तरीका है।

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

गलत लौटाता है।

यह देखने के बाद यह अनिवार्य रूप से सत्य या गलत वापस आ जाएगा कि यह स्थिति उस स्थिति में मौजूद है (यदि यह मौजूद है) सूची में है या नहीं।

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

सत्य लौटाता है।

बेलिसियस का उत्तर हालांकि निम्न स्तर पर नियंत्रण प्रदान करेगा।

संबंधित मुद्दे