清除并行列表中相应元素的列表推导

时间:2016-11-22 02:24:56

标签: python list

我想摆脱数组和另一个数组中的所有零,去掉与第一个数组中有零的索引相对应的元素。

我有:

A = [2,3,2,4,5]
P = [0.1,0.3,0.4,0.5,0]
new_P = [x for x in P if P[x]!=0]
new_A = [x for x in A if P[x]!=0]

我做错了什么?例如,对于new_P,我得到一个空白数组。

2 个答案:

答案 0 :(得分:1)

  • 您的第一个列表理解将无效,因为您的迭代 通过引用,但您尝试按索引访问元素。 Python将引发IndexError。将您的比较更改为使用x代替P[x]进行测试:new_P = [x for x in P if x != 0]

  • 您的第二个列表理解将无法正常工作,因为第一个列表理解不起作用。但同样的修复不适用于您的第二个列表理解。您需要使用zip来迭代 {/ strong> PA,测试P中的当前元素是否为零。

    >>> A = [2,3,2,4,5]
    >>> P = [0.1,0.3,0.4,0.5,0]
    >>> new_P = [el for el in P if el != 0] # testing using x not P[x]
    >>> new_P
    [0.1, 0.3, 0.4, 0.5]
    >>> new_A = [el[0] for el in zip(A, P) if el[1] != 0]
    >>> new_A
    [2, 3, 2, 4]
    >>> 
    

答案 1 :(得分:0)

如何将列表压缩在一起并一起处理它们的元素呢?

a = [2, 3, 2, 0, 5]
p = [0.1, 0.3, 0.4, 0.5, 0.6]

a, p = zip(*[(a, p) for a, p in zip(a, p) if p != 0])