2010-04-12 43 views
23

Si tiene una lista en python, y quiere extraer el elemento en los índices, digamos 1, 2 y 5 en una nueva lista, ¿cómo lo hace?¿Cómo extraer elementos de una lista usando índices en Python?

Esto es cómo lo hice, pero no estoy muy satisfecho

>>> a 
[10, 11, 12, 13, 14, 15] 
>>> [x[1] for x in enumerate(a) if x[0] in [1,2,5]] 
[11, 12, 15] 

ninguna manera mejor?

más en general, dada una tupla con índices, cómo usar esta tupla para extraer los elementos correspondientes de una lista, eventualmente con duplicación (p. Ej., Tupla (1,1,2,1,5) produce [11,11] , 12,11,15])

+0

¿Existe alguna garantía de que la tupla solo contenga índices válidos? –

+1

Esta pregunta también se ha formulado en https://stackoverflow.com/questions/18272160/access-multiple-elements-of-list-knowing-their-index – jdhao

Respuesta

52

utilizan Tal vez esto:

[a[i] for i in (1,2,5)] 
# [11, 12, 15] 
+0

por cierto, esto también es mucho más rápido. la obtención de elementos K de una lista de tamaño N es de complejidad O (K) aquí y O (N * K) en la solución de OP. – yairchu

+1

bien ... gracias. Esto fue muy trivial, y está claro que estoy demasiado cansado. –

+1

No hay problema. Cualquier día que pueda responder una pregunta de Stefano Borini es un (raro, pero) buen día :) – unutbu

5

Trate

numbers = range(10, 16) 
indices = (1, 1, 2, 1, 5) 

result = [numbers[i] for i in indices] 
2

límites verificado:

[a[index] for index in (1,2,5,20) if 0 <= index < len(a)] 
# [11, 12, 15] 
4

Creo que estás buscando este:

elements = [10, 11, 12, 13, 14, 15] 
indices = (1,1,2,1,5) 

result_list = [elements[i] for i in indices]  
3

Uso Numpy directa indexación de matrices, como en MATLAB, Julia, ...

a = [10, 11, 12, 13, 14, 15]; 
s = [1, 2, 5] ; 

import numpy as np 
list(np.array(a)[s]) 
# [11, 12, 15] 

Mejor aún, sólo se mantenga con matrices numpy

a = np.array([10, 11, 12, 13, 14, 15]) 
a[s] 
#array([11, 12, 15]) 
Cuestiones relacionadas