2011-01-27 3 views

risposta

12

Ci sono un sacco di modi, qui sono alcuni di loro:

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

In generale, con Pick [] (come esempio) è possibile modellare qualsiasi maschera indice immaginabile.

+1

Fornire la lunghezza del 'Span' (' 1 ;; Le ;; 2') non è necessaria. Per impostazione predefinita, il secondo termine è la fine dell'elenco. Quindi, '1 ;;;; 2' funziona esattamente allo stesso modo. – rcollyer

+0

@rcollyer hai ragione! Vedi anche la risposta di Michele, usa -1 invece di Lunghezza [], che può anche essere evitato. –

13

Ecco un po 'di più, oltre a @belisarius's answer, che non richiedono il calcolo Length[lis]:

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

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

Spesso è possibile utilizzare -1 per rappresentare la posizione "ultimo".

+0

+1 per ricordarmi che -1: D –

+0

Una domanda: AFAIK Lunghezza [] non è in elaborazione (il suo tempo è pari a zero). Ho ragione? –

5

Per qualche motivo la forma concisa di Span è stata omessa dalle risposte.

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.