python 列表去空_在Python中消除数组列表中的空数组和零数组

本文介绍了在Python中如何使用NumPy和列表理解来去除列表中包含的空数组和零数组。提供了几种解决方案,并通过定时比较展示了它们在不同大小数组上的性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用NumPy和列表理解:>>> from numpy import *

解决方案1:

^{pr2}$

解决方案2:>>> [x[x!=0] for x in LA if count_nonzero(x)]

[array([ 99.08322813, 253.42371683, 300.792029 ]),

array([ 51.55274095, 106.29707418]),

array([ 149.07283952, 191.45513754, 251.19610503, 393.50806493,

453.56783459]),

array([ 105.61643877, 442.76668729, 450.37335607]),

array([ 348.84179544]),

array([ 295.05603151, 451.77083268, 500.81771919]),

array([ 295.05603151, 307.37232315, 451.77083268, 500.81771919]),

array([ 91.86758237, 148.70156948, 488.70648486, 507.31389766]),

array([ 353.68691095]),

array([ 208.21919198, 246.57665959, 251.33820305, 394.34266882])]

定时比较:In [56]: %timeit [x[x!=0] for x in LA if len(x) and len(x[x!=0])]

10000 loops, best of 3: 176 µs per loop

In [88]: %timeit [x[x!=0] for x in LA if count_nonzero(x)]

10000 loops, best of 3: 89.7 µs per loop

#@gnibbler's solution:

In [82]: %timeit [x.compress(x) for x in LA if x.any()]

10000 loops, best of 3: 138 µs per loop

较大阵列的计时结果:In [140]: LA = [resize(x, 10**5) for x in LA]

In [142]: %timeit [x[x!=0] for x in LA if len(x) and len(x[x!=0])]

10 loops, best of 3: 26.7 ms per loop

In [143]: %timeit [x[x!=0] for x in LA if count_nonzero(x) > 0]

10 loops, best of 3: 26 ms per loop

In [144]: %timeit [x.compress(x) for x in LA if x.any()]

10 loops, best of 3: 42.7 ms per loop

In [145]: %timeit [x.compress(x) for x in LA if count_nonzero(x)]

10 loops, best of 3: 45.8 ms per loop

In [146]: %timeit [x[x!=0] for x in LA if x.any()]

10 loops, best of 3: 22.9 ms per loop

In [147]: %timeit [x[x!=0] for x in LA if count_nonzero(x)]

10 loops, best of 3: 26.2 ms per loop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值