首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
V2EX  ›  Python

[ Python ] 如何遍历列表中的元素,得到一定规律元素的新列表?

  •  
  •   AILOVEU · 162 天前 · 1219 次点击
    这是一个创建于 162 天前的主题,其中的信息可能已经有所发展或是发生改变。

    E6cq8e.png

    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. 能解决最开始的问题做好,我对实现比较感兴趣
    2. 针对缘由的问题,能处理语音的也可以,但尽量不要用第三方的语音处理库,有些功能它们没有所以才自己写的

    写完之后感觉有些地方没说明白,大家帮忙讨论下吧,或许我就有思虑了

    10 回复  |  直到 2019-05-09 09:19:27 +08:00
        1
    Ediacaran   162 天前 via iPhone
    Numpy 修改维度为 2*N
    然后再取
        2
    Cooky   162 天前 via Android   ♥ 2
    [ n for i, n in enumerate (list) if 0 <(i+1)%4 < 3 ]
    差不多就这样
        3
    AILOVEU   162 天前
    @Cooky 其实我的问题用字符串表示更确切些,即“ string ”变成“ stng ”。当然字符串这样比喻也只是为了方便说明,最最最终是 b'xxx',这种的截取
        4
    rickygao   162 天前 via Android
    chunked + flatmap
        5
    sunwei0325   162 天前
        6
    ipwx   162 天前
    np.array(num_list).reshape([-1,2])[::2].reshape([-1])
        7
    ipwx   162 天前
    对于 bytes:

    >>> np.frombuffer(b'string', dtype=np.uint8).reshape([-1,2])[::2].reshape([-1]).tobytes()
    b'stng'
        8
    Cooky   162 天前 via Android
    @AILOVEU 同样适用于 bytes
        9
    cissoid   162 天前
    >>> from itertools import compress, cycle
    >>> list(compress(range(1, 9), cycle([1,1,0,0])))
    [1, 2, 5, 6]
        10
    wizardoz   161 天前
    reduce(lambda x,y: x + list(y), zip(num_list[::4], num_list[1::4]), [])
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2928 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 11:17 · PVG 19:17 · LAX 04:17 · JFK 07:17
    ♥ Do have faith in what you're doing.