

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 [ 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]), []) |