2010-04-12 5 views
23

Если у вас есть список в python и хотите извлечь элемент по индексам, скажем 1, 2 и 5 в новый список, как вы это делаете?Как извлечь элементы из списка, используя индексы в Python?

Это, как я это сделал, но я не очень доволен

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

ли лучший способ?

В целом, учитывая кортеж с индексами, как использовать этот кортеж для извлечения соответствующих элементов из списка, в конечном итоге с дублированием (например, кортеж (1,1,2,1,5) производит [11,11 , 12,11,15])

+0

Есть ли гарантия, что кортеж содержит только действительные индексы? –

+1

Этот вопрос также задан в https://stackoverflow.com/questions/18272160/access-multiple-elements-of-list-knowing-their-index – jdhao

ответ

52

Возможно использовать это:

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

Кстати, это также намного быстрее. выборка K элементов из списка размера N имеет сложность O (K) здесь и O (N * K) в решении OP. – yairchu

+1

ok ... спасибо. Это было чертовски тривиально, и ясно, что я слишком устал. –

+1

Нет проблем. В любой день я могу ответить на вопрос Стефано Борини (редкий, но) хороший день :) – unutbu

5

Попробуйте

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

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

Bounds Проверила:

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

Я думаю, что вы ищете это:

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

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

Использование Numpy прямого индексирования массива, как в MATLAB, Юлия, ...

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

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

еще лучше, просто остаться с Numpy массивами

a = np.array([10, 11, 12, 13, 14, 15]) 
a[s] 
#array([11, 12, 15]) 
Смежные вопросы