2012-02-17 2 views
0

Я работаю с python, и у меня есть действительно основной вопрос. Я массив из 1000 элементов. Я хочу выбрать 100 позиций этого массива. Я хочу сделать что-то вродеВыберите массивы из списка

 selected_value=array[i for i in position_to_select] 

Как я могу сделать эту работу?

ответ

6

Предположим, у вас есть список arr, из которого вы хотите выбрать элементы в позиции 0, 4, 2:

>>> arr = [1, 2, 3, 4, 5, 6, 7] 
>>> selected = [arr[i] for i in [0, 4, 2]] 
>>> selected 
[1, 5, 3] 
>>> 

Я думаю, что ключевая разница с исходным кодом образца с помощью arr[i] в списке понимание. Понимание списка создает новый список. Он не используется для индексации существующего списка.

+0

Спасибо! Что делать, если я хочу выбрать все элементы, которые не принадлежат списку? Я попытался с выбранным = [arr [i] для i не в [0, 4, 2]], но получил недопустимую синтаксическую ошибку. – Brian

+0

@Matteo: самым эффективным способом было бы рассчитать список индексов заранее, а затем использовать тот же код. Предварительно вычисление может быть произвольным, например индексы, которые не удовлетворяют определенному предикату –

3
>>> selected_value = [array[i] for i in position_to_select] 
1

Если вы часто работаете с большими массивами, взгляните на numpy:

import numpy as np 

arr = np.array([3., 4., 3., 7., 3., 6., 9., 1., 2., 5.]) 
position_to_select = [1, 3, 6] 

selected_value = arr[position_to_select] 

# array([ 4., 7., 9.]) 
Смежные вопросы