2016-02-26 2 views
1

Я хочу удалить элемент с помощью B массива идентификаторов, учитывая специфический скалярный ID «С»Как удалить определенный элемент из списка python?

В MATLAB я могу это сделать:

A(B == C) = [] 

Это пример моего кода:

boxes = [[1,2,20,20],[4,8,20,20],[8,10,40,40]] 
boxIDs = [1,2,3] 


IDx = 2 

Я хочу удалить второй блок полностью из списка.

Как это сделать в python? У меня numpy.

+1

'A [B == C] = []'. Используете ли вы 1d-массив, каков размер/форма ваших 'A' и' B'? –

+0

Кажется, не работает. Он всегда удаляет первый элемент? –

+1

Не могли бы вы приложить [mcve] (http://stackoverflow.com/help/mcve)? Без примеров данных и ожидаемого результата сложно ответить на ваш вопрос. –

ответ

1

Для этого можно использовать индексирование numpy. Вы можете найти более подробную информацию в docs. В вашем случае:

import numpy as np 
boxes = np.array([[1,2,20,20],[4,8,20,20],[8,10,40,40]]) 
boxIDs = np.array([1,2,3]) 

IDx = 2 

In [98]: boxes[boxIDs != IDx, :] 
Out[98]: 
array([[ 1, 2, 20, 20], 
     [ 8, 10, 40, 40]]) 
2

без импорта numpy вы можете pop из элемента. попробуйте:

boxes = [[1,2,20,20],[4,8,20,20],[8,10,40,40]] 
IDx = 1 
pop_element = boxes.pop(IDx) 

boxes список теперь [[1, 2, 20, 20], [8, 10, 40, 40]] и pop_element является [4, 8, 20, 20]

PS: в питона индексы начинаются с 0 вместо 1.

0

В набившие оскомину-Python, я думаю, что вы хотите сделать это:

try: 
    helpindex = boxIDs.index(IDx) 
    del boxes[index], boxIDs[index] 
except ValueError: 
    # Already deleted 
    pass 

Обратите внимание, что если вы полагаетесь на boxIDs быть «параллельно» с boxes, вы должны убедиться, что вы держите их параллельно, удаляя оба.