num_list = [1,2,3,4,5,6,7,8]
#怎么处理 num_list,使得按图片中,隔两个取两个
half_num_list = [1,2,5,6]
使用 num_list[::2],只能得到[1,3,5,7]这种,不满足需求
为了不让大家解决 xy 问题,我把问题的缘由说一下: 在处理 wav 语音的时候,需要降采样率,16k->8k,采样精度为 16bit 不变。 想要获取降完采样率语音的 data 部分,可以用下面的方法,所以说实现是没有问题的。
#伪代码
#f1 是 16k 采样率的文件
f1.seek(0,0)
while True:
data = f1.read(2)
f2.write(data)
data = f1.read(2)
#f2 是 8k 采样率的文件
但是我需要把 f2 的 data 传给另外一个参数,用这种方式不是很 pythonic,就想问下列表怎么操作?
写完之后感觉有些地方没说明白,大家帮忙讨论下吧,或许我就有思虑了
1
Ediacaran 2019-05-08 17:34:20 +08:00 via iPhone
Numpy 修改维度为 2*N
然后再取 |
2
Cooky 2019-05-08 17:50:39 +08:00 via Android 2
[ n for i, n in enumerate (list) if 0 <(i+1)%4 < 3 ]
差不多就这样 |
3
AILOVEU OP @Cooky 其实我的问题用字符串表示更确切些,即“ string ”变成“ stng ”。当然字符串这样比喻也只是为了方便说明,最最最终是 b'xxx',这种的截取
|
4
rickygao 2019-05-08 18:12:40 +08:00 via Android
chunked + flatmap
|
5
sunwei0325 2019-05-08 18:17:01 +08:00
|
6
ipwx 2019-05-08 18:19:35 +08:00
np.array(num_list).reshape([-1,2])[::2].reshape([-1])
|
7
ipwx 2019-05-08 18:22:41 +08:00
对于 bytes:
>>> np.frombuffer(b'string', dtype=np.uint8).reshape([-1,2])[::2].reshape([-1]).tobytes() b'stng' |
9
cissoid 2019-05-08 18:31:59 +08:00
>>> from itertools import compress, cycle
>>> list(compress(range(1, 9), cycle([1,1,0,0]))) [1, 2, 5, 6] |
10
wizardoz 2019-05-09 09:19:27 +08:00
reduce(lambda x,y: x + list(y), zip(num_list[::4], num_list[1::4]), [])
|