如何从元组列表中删除项目?

时间:2016-01-14 11:46:26

标签: python numpy

我想使用索引列表从我的元组列表中删除项目:

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)

但这不会产生预期的结果。

2 个答案:

答案 0 :(得分: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)]

答案 1 :(得分:0)

我在这篇文章中的回答:Deleting multiple elements from a list

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

看到这确实删除了您想要的项目,而不是创建新列表,用新列表替换原始变量。 (我没有测试哪个更高效,如果列表足够大,我会期待这个)