我有四个数组,比如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
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)
| 归档时间: |
|
| 查看次数: |
156 次 |
| 最近记录: |