2012-01-14 19 views
22

Ho l'idea generale di come farlo in Java, ma sto imparando Python e non sono sicuro di come farlo.Saltare ogni altro elemento dopo il primo

Ho bisogno di implementare una funzione che restituisca una lista contenente ogni altro elemento della lista, a partire dal primo elemento.

Finora, non ho e non sicuro di come fare da qui da quando sto solo imparando a-loop in Python sono diversi:

def altElement(a): 
    b = [] 
    for i in a: 
     b.append(a) 

    print b 

risposta

41
def altElement(a): 
    return a[::2] 
34

Fetta notazione a[start_index:end_index:step]

return a[::2] 

dove start_index le impostazioni predefinite sono 0 e end_index per impostazione predefinita len(a).

0

Uso del ciclo for come si dispone, in un modo è questo:

def altElement(a): 
    b = [] 
    j = False 
    for i in a: 
     j = not j 
     if j: 
      b.append(i) 

    print b 

j appena continua commutazione tra 0 e 1 per tenere traccia di quando per aggiungere un elemento a b.

+0

Perché non siete semplicemente utilizzando un valore booleano come l'interruttore? Inoltre, questo è indicibilmente unidiomatico. –

+1

L'ho scritto in questo modo per rispecchiare il tentativo dell'autore. Sì, non è molto simile a Python. Certo, lo modifico felicemente e lo trasformo in un bool ... – bchurchill

+0

questo è un approccio davvero scadente considerando che puoi usare le porzioni di lista – jdi

1
items = range(10) 
print items 
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
print items[1::2] # every other item after the second; slight variation 
>>> [1, 3, 5, 7, 9] 
] 
5

In alternativa, si potrebbe fare:

for i in range(0, len(a), 2): 
    #do something 

La fetta notazione estesa è molto più conciso, però.

+0

Questo è stato utile per me, ma è diverso dalla notazione a slice estesa in quanto ti dà un indice con il quale puoi quindi raggiungere l'array originale , invece di ottenere una matrice "filtrata". Quindi hanno casi d'uso diversi. –

2

Ci sono più di un modo per scuoiare un gatto. - Seba Smith

arr = list(range(10)) # Range from 0-9 

# List comprehension: Range with conditional 
print [arr[index] for index in range(len(arr)) if index % 2 == 0] 

# List comprehension: Range with step 
print [arr[index] for index in range(0, len(arr), 2)] 

# List comprehension: Enumerate with conditional 
print [item for index, item in enumerate(arr) if index % 2 == 0] 

# List filter: Index in range 
print filter(lambda index: index % 2 == 0, range(len(arr))) 

# Extended slice 
print arr[::2] 
Problemi correlati