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

标签 python arrays

我有四个数组,比如 A、B、C 和 D,它们的 NumElements 大小相同,我想删除其中的所有 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)

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

最佳答案

a,b,c,d = [filter(lambda i: i != 0, l) for l in [a,b,c,d]]

过滤每个列表,删除不为 0 的元素。

编辑,

只是为了解释发生了什么

Filter 接受一个表达式并“过滤”列表,方法是将函数应用于列表中的所有内容,所有不返回 True 的内容。

Lambda 是函数的简写

所以

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

def is_even(x):
    return x % 2 == 0
filter(is_even, a)

关于python - 一次删除多个数组中所有给定值的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17743477/

相关文章:

c# - 为什么将 List 转换为 Array 而不是在 C# 中引用?

javascript - 在 Javascript 中实例化数组后定义其初始数据的最佳方法是什么?

javascript - 用于访问嵌套对象的正则表达式

python - 为不规则间隔的数据找到最接近特定时间的每日观察

python - pickle 错误: AttributeError: Can't get attribute on <module '__main__' (built-in)>

python - 可以在请求模块中禁用 InsecureRequestWarnings 吗?

python - 如何获取 anchor 标签内的元素?

python - 按行切片 Pandas DataFrame

javascript - Angularjs orderby 对象键

javascript - 在 Javascript 中将字符串转换为二维数组的有效方法