Удалите несколько записей из списка с учетом списка индексов

#python #numpy-slicing

Вопрос:

У меня есть список индексов и список данных. В списке индексов указано, какие элементы следует удалить из списка данных. Я хотел бы эффективно использовать список индексов, т. е. без циклов. Есть ли более быстрый способ удалить эти элементы?

Комментарии:

1. Какое это имеет отношение к numpy?

2. Все списки имеют индексы. Что вы подразумеваете под «списком индексов»?

3. Я не думаю, что есть способ сделать это без циклов. Отсортируйте список индексов от самого высокого до самого низкого. Пройдитесь по ним, обращаясь list_of_data.pop(index) к каждому.

4. @BenAlan Он имеет в виду список, содержащий индексы в списке данных.

5. Согласно ответу @Barmar’а, или a = [x for i,x in enumerate(a) if i not in indices] , предполагая a , что это ваш список данных и indices ваш список индексов.

Ответ №1:

Предполагая, что вы используете numpy, np.delete делает именно то, что вы хотите:

 >>> a = np.array([1, 4, 9, 16, 25, 36])
>>> np.delete(a, [1, 2, 5])
array([ 1, 16, 25])