2016-11-22 99 views
0

我想摆脱数组中的所有零和另一个数组中,摆脱相应的索引中的零的元素第一个数组。列表理解,摆脱并行列表中的相应元素

我:

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

我猜'x'是元素,而不是指数? – qxz

+2

想一想在这种情况下'x'代表什么。 – pzp

+0

请澄清问题。我不确定你想要达到的目标 –

回答

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]) 
1
  • 您的第一个列表解析会无法工作,因为你通过迭代参考 ,但你试图通过索引访问的元素。 Python将会引发一个IndexError。将您的比较更改为使用x而不是P[x]new_P = [x for x in P if x != 0]进行测试。

  • 您的第二个列表理解不会出于第一个无法正常工作的确切原因。但是同样的修复不适用于你的第二个列表理解。您需要使用zip遍历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] 
    >>> 
    
+0

谢谢,有道理:) –

+0

@python_learner当然,很高兴我可以帮助:)作为一个方面说明,我建议[学习更多关于列表解析](https://docs.python.org/ 2/tutorial/datastructures.html#list-comprehensions)才能使用更多。 –