2016-02-26 140 views
1

我想用ID的B排列,以除去甲元件給出的具體標ID「C」如何從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:在Python指數從0而不是1開始。

0

在普通老式的Python,我認爲你要做到這一點:

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

請注意,如果你是依靠boxIDs是「平行」與boxes,你必須確保你讓他們從兩者中刪除並行。