一次删除多个数组中给定值的所有出现

Del*_*aIV 3 python arrays

我有四个数组,比如A,B,C和D,它们的大小相同,并且我想删除它们中的所有0.如果A有零,B,C和D也有一个,在同一位置.所以我想循环A的元素:

for n in range(NumElements):
    if A[n]==0:
       A.pop(n)
       B.pop(n)
       C.pop(n)
       D.pop(n)
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,因为从数组弹出0会减小它们的大小,所以我最终尝试访问A [NumElements-1],而现在A只是NumElements-m long.我知道我应该使用数组副本,但数组很长,我想保持低内存消耗,因为我在Java虚拟机中工作(不要问:(((().另外,我想要一种有效的方法,但最重要的是可读(这段代码必须由像我这样的Python文盲维护,所以我需要亲吻).谢谢,

deltaquattro

Jak*_*yer 5

a,b,c,d = [filter(lambda i: i != 0, l) for l in [a,b,c,d]]
Run Code Online (Sandbox Code Playgroud)

过滤每个列表,删除非0的元素.

编辑,

只是为了解释发生了什么

过滤器通过将函数应用于列表中的所有内容,以及不返回True的所有内容,使用表达式并"过滤"列表.

Lambda是一个功能的简称

所以

a = [1,2,3,4,5,6,7,8]

def is_even(x):
    return x % 2 == 0
filter(is_even, a)
Run Code Online (Sandbox Code Playgroud)