2016-01-14 35 views
1

我想使用索引的列表,從我的元組的列表中刪除項目:如何從我的元組列表中刪除項目?

mytupList = [(1,2),(2,3),(5,6),(8,9)] 
indxList = [1,3] 

我曾嘗試使用numpy的,像這樣:

newtupList = numpy.delete(mytupList,indxList).tolist() 

,但並未奏效。

我想我newtupList = [(1,2),(5,6)]

我究竟做錯了什麼?我也嘗試過:

a = np.array(mytupList) 
newtup = np.delete((a),indxList) 

但這不會產生所需的結果。

+0

它如何「沒有工作」?產生了什麼結果? – Psytho

回答

1

正如在docs中提到的那樣,您需要使用axis選項,因爲如果不提及它,它會刪除扁平版本上的元素。因此,你需要做這樣的 -

np.delete(mytupList,indxList,axis=0).tolist() 

採樣運行 -

In [21]: mytupList 
Out[21]: [(1, 2), (2, 3), (5, 6), (8, 9)] 

In [22]: indxList 
Out[22]: [1, 3] 

In [23]: np.delete(mytupList,indxList).tolist() # Flattens and deletes 
Out[23]: [1, 2, 5, 6, 8, 9] 

In [24]: np.delete(mytupList,indxList,axis=0).tolist() # Correct usage 
Out[24]: [[1, 2], [5, 6]] 

要保留的元組的列表格式,使用map刪除後,像這樣 -

map(tuple,np.delete(mytupList,indxList,axis=0)) 

樣品運行 -

In [16]: map(tuple,np.delete(mytupList,indxList,axis=0)) 
Out[16]: [(1, 2), (5, 6)] 
+0

這會產生一個列表清單[[1,2],[5,6]] - 有什麼辦法保留元組列表? – wunderkind

+0

@wunderkind請查看最後的編輯。 – Divakar

+0

優秀!這是一種享受! – wunderkind

0

我在這個崗位回答:Deleting multiple elements from a list

for i in sorted(indices, reverse=True): 
    del somelist[i] 

看到,這確實會刪除,而不是做一個新的列表與新列表代替原來的變量,你想要的物品。 (我還沒有測試哪種效率更高,如果列表足夠大,我會期待這一個)

+0

mylist = [(23,23),(434,353),(353,3535),(1425,475)] – wunderkind

+0

oops ...是的,確實可以工作(測試),雖然我確信我可以在元組列表。效率更高,效率更高? – wunderkind

+0

我沒有得到你的問題。在元組列表上做這件事?沒有工作?是的,效率更高。 – tglaria