Python - 删除指向另一个对象的对象

时间:2016-06-08 07:06:24

标签: python list filter

我有一个如下所示的元组列表:

In [136]: z
Out[136]: 
[(0, array([ 0.71428571,  2.92857143,  1.64285714,  1.07142857])),
 (1, array([ 2.89473684,  1.68421053,  0.52631579,  3.21052632])),
 (2, array([ 1.03571429,  1.5       ,  2.75      ,  2.96428571])),
 (3, array([ 3.35714286,  2.07142857,  3.        ,  1.28571429])),
 (0, array([ 5.234324  ,  3.234324  ,  4.        ,  2.34534534])),
 (4, array([ 0.6,  0.1,  2.6,  0.4]))]

以及如下字符串列表:

In [138]: b 
Out[138]: ['Sam', 'Rachel', 'Mosses', 'Roth', 'Wilhelm']

z中的整数指向b中的字符串。

例如,向量(0, array([ 0.71428571, 2.92857143, 1.64285714, 1.07142857]))(0, array([ 5.234324 , 3.234324 , 4. , 2.34534534]))都代表'Sam'b[0])。

我想从b删除一个条目。结果,z中指向此删除条目的所有向量都将被删除。

例如,如果我要删除'Sam',我希望我的新z成为:

In [136]: z
Out[136]: 
[(0, array([ 2.89473684,  1.68421053,  0.52631579,  3.21052632])),
 (1, array([ 1.03571429,  1.5       ,  2.75      ,  2.96428571])),
 (2, array([ 3.35714286,  2.07142857,  3.        ,  1.28571429])),
 (3, array([ 0.6,  0.1,  2.6,  0.4]))]

In [138]: b 
Out[138]: ['rachel', 'mosses', 'roth', 'wilhelm']

1 个答案:

答案 0 :(得分:2)

我没有尝试,但可能类似(k是要移除的键;在您的示例k=0中):

z = [ (e[0] - (e[0]>k), e[1]) for e in z if e[0] != k ]

说明:您可以在列表解析中使用语法for e in z if获得过滤效果;通过使用(e[0]>k)的算术值,您还可以在大于k时将1减去初始密钥。