2012-01-14 8 views
22

Tengo la idea general de cómo hacer esto en Java, pero estoy aprendiendo Python y no estoy seguro de cómo hacerlo.Saltando cada dos elementos después de la primera

Necesito implementar una función que devuelve una lista que contiene todos los demás elementos de la lista, empezando por el primer elemento.

Hasta el momento, no tengo y no está seguro de cómo hacerlo desde aquí, ya sólo estoy aprendiendo a-bucles en Python son diferentes:

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

    print b 

Respuesta

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

notación rebanada a[start_index:end_index:step]

return a[::2] 

donde start_index el valor predeterminado es 0 y end_index se establece de manera predeterminada en len(a).

0

Uso de la for-loop como que tiene, de una forma es la siguiente:

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

    print b 

j sólo mantiene la conmutación entre 0 y 1 para mantener un registro de cuando para añadir un elemento a b.

+0

¿Por qué no simplemente utilizando un booleano como la palanca? Además, esto es indeciblemente unidiomático. –

+1

Lo escribí de esta manera para reflejar el intento del autor. Sí, no es muy parecido a Python. Seguro, voy a editar felizmente y convertirlo en un bool ... – bchurchill

+0

este es un enfoque realmente pobre teniendo en cuenta que puedes usar listas de segmentos – 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

Como alternativa, puede hacer:

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

La notación rebanada extendida es mucho más concisa, sin embargo.

+0

Esto fue útil para mí, pero es diferente de la notación de división extendida en que le da un índice con el que puede alcanzar la matriz original , en lugar de obtener una matriz "filtrada". Entonces tienen diferentes casos de uso. –

2

hay más de una manera de pelar un gato. - 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] 
Cuestiones relacionadas