2011-01-27 17 views
7

में किसी सूची में अजीब अनुक्रमित तत्वों को कैसे प्राप्त करें सूची में अजीब अनुक्रमित तत्व कैसे प्राप्त करें? मैं चयन के बारे में सोच रहा हूं, लेकिन किसी तत्व की स्थिति को वापस करने में कुछ भी नहीं मिला, विशेष रूप से सूची में दोहराव वाले तत्वों पर विचार करते हुए।गणित

सामान्य रूप से, उन तत्वों का चयन कैसे करें जिनके सूचकांक कुछ निश्चित शर्तों को पूरा करते हैं?

उत्तर

12

तरीके के एक बहुत हैं, यहाँ उनमें से कुछ हैं: पिक [] (एक उदाहरण के रूप में) के साथ

In[2]:= a = Range[10];le = [email protected]; 

In[3]:= Table[a[[i]], {i, 1, le, 2}] 

In[5]:= Pick[a, Table[Mod[i, 2], {i, 1, le}], 1] 

In[6]:= a[[1 ;; le ;; 2]] 

सामान्य तौर पर, आप किसी भी बोधगम्य सूचकांक मुखौटा मॉडल कर सकते हैं।

+1

'Span' में लंबाई की आपूर्ति (' 1 ;; ले ;; 2') की आवश्यकता नहीं है। डिफ़ॉल्ट रूप से, दूसरा शब्द सूची का अंत है। तो, '1 ;;;; 2 बिल्कुल वही काम करता है। – rcollyer

+0

@rcollyer आप सही हैं! माइकल के जवाब को भी देखें, वह लंबाई [] के बजाय -1 का उपयोग करता है, जिसे भी टाला जा सकता है। –

13

यहाँ @belisarius's answer के अलावा कुछ और, जो कंप्यूटिंग Length[lis] की आवश्यकता नहीं है है:

Take[lis, {1, -1, 2}] 

lis[[1 ;; -1 ;; 2]] 

आप अक्सर -1 उपयोग कर सकते हैं "पिछले" स्थिति का प्रतिनिधित्व करने के लिए।

+0

+1 मुझे याद दिलाने के लिए कि -1: डी –

+0

एक प्रश्न: AFAIK लंबाई [] कंप्यूटिंग नहीं कर रहा है (इसका समय शून्य है)। क्या मैं सही हूँ? –

5

किसी कारण से Span के terse रूप उत्तर से छोड़े गए हैं।

Range[20][[;;;;2]] 
{1, 3, 5, 7, 9, 11, 13, 15, 17, 19}

Quoting the documentation:

;;;;k 
from the beginning to the end in steps of k.