我想摆脱数组中的所有零和另一个数组中,摆脱相应的索引中的零的元素第一个数组。列表理解,摆脱并行列表中的相应元素
我:
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
,我得到一个空白数组。
我想摆脱数组中的所有零和另一个数组中,摆脱相应的索引中的零的元素第一个数组。列表理解,摆脱并行列表中的相应元素
我:
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
,我得到一个空白数组。
如何将列表压缩在一起并将它们的元素一起处理?
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])
您的第一个列表解析会无法工作,因为你通过迭代参考 ,但你试图通过索引访问的元素。 Python将会引发一个IndexError
。将您的比较更改为使用x
而不是P[x]
:new_P = [x for x in P if x != 0]
进行测试。
您的第二个列表理解不会出于第一个无法正常工作的确切原因。但是同样的修复不适用于你的第二个列表理解。您需要使用zip
遍历和P
和A
,测试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]
>>>
谢谢,有道理:) –
@python_learner当然,很高兴我可以帮助:)作为一个方面说明,我建议[学习更多关于列表解析](https://docs.python.org/ 2/tutorial/datastructures.html#list-comprehensions)才能使用更多。 –
我猜'x'是元素,而不是指数? – qxz
想一想在这种情况下'x'代表什么。 – pzp
请澄清问题。我不确定你想要达到的目标 –