我想摆脱数组和另一个数组中的所有零,去掉与第一个数组中有零的索引相对应的元素。
我有:
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
,我得到一个空白数组。
答案 0 :(得分:1)
您的第一个列表理解将无效,因为您的迭代
通过引用,但您尝试按索引访问元素。 Python将引发IndexError
。将您的比较更改为使用x
代替P[x]
进行测试:new_P = [x for x in P if x != 0]
。
您的第二个列表理解将无法正常工作,因为第一个列表理解不起作用。但同样的修复不适用于您的第二个列表理解。您需要使用zip
来迭代 {/ strong> 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]
>>>
答案 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])