2012-05-13 15 views
21

Dada una listaCortando una lista utilizando una variable, en Python

a = range(10) 

Usted puede cortar usando afirmaciones tales como

a[1] 
a[2:4] 

Sin embargo, quiero hacer esto en base a una variable establecida en otros lugares en el código. Puedo hacer esto fácilmente para el primero

i = 1 
a[i] 

¿Pero cómo puedo hacer esto para el otro? He intentado indexar con una lista:

i = [2, 3, 4] 
a[i] 

Pero eso no funciona. También he intentado usar una cadena:

i = "2:4" 
a[i] 

Pero eso tampoco funciona.

¿Esto es posible?

Respuesta

40

eso es lo que es slice() para:

a = range(10) 
s = slice(2,4) 
print a[s] 

pero eso no es realmente tan diferente a continuación, utilizando a[2:4].

7

¿Por qué tiene que ser una sola variable? Sólo tiene que utilizar dos variables:

i, j = 2, 4 
a[i:j] 

Si realmente tiene que ser una sola variable se puede utilizar una tupla.

+1

Mi caso de uso involucraba un análisis detallado de html, tratando de encontrar el último elemento en esta tabla html. El código parecía 'last_row = list (reversed (parsed_html_rows [-2: -1]))' En la revisión del código, nos dimos cuenta de que tenía varios de estos 'magic ranges' en el código para extraer varias cosas. Darles un nombre hace que sea más fácil para mí y para el crítico. 'Last_row_indices = slice (-2, -1)' y 'last_row = list (reverseed (rows [last_row_indices])) # no más wtf'ing sobre por qué - 2: -1 –

2

Con las asignaciones siguientes, todavía está utilizando el mismo tipo de operaciones de división que muestra, pero ahora con variables para los valores.

a = range(10) 
i = 2 
j = 4 

continuación

print a[i:j] 
[2, 3] 
2
>>> a=range(10) 
>>> i=[2,3,4] 

>>> a[i[0]:i[-1]] 
range(2, 4) 

>>> list(a[i[0]:i[-1]]) 
[2, 3] 
Cuestiones relacionadas