推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› 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
angel725
V2EX  ›  Python

python3 每两位数字插一个空格,怎么实现

  •  
  •   angel725 · Oct 7, 2018 · 8646 views
    This topic created in 2950 days ago, the information mentioned may be changed or developed.
    010609162526
    变成
    01 06 09 16 25 26

    没想出来该怎么做??
    39 replies  •  2018-10-16 18:16:09 +08:00
    lopetver
    lopetver
    Oct 7, 2018
    1
    https://blog.csdn.net/guaguastd/article/details/43525923

    方法应该有很多的,链接使用的是正则分割

    ps.答案是百度出来的
    whoami9894
    whoami9894
    Oct 7, 2018 via Android
    2
    这也需要发贴问吗……
    KIMMG
    KIMMG
    Oct 7, 2018❤️1
    3
    import re
    number = '010609162526'
    result = " ".join(re.findall(r'.{2}', number))
    print(result)



    ----------------------------------------------
    回复区竟然不支持 makedown
    zhidian
    zhidian
    Oct 7, 2018
    4
    这玩意儿为啥要正则,搜搜 python 怎么 chunk 字符串不好吗?
    Les1ie
    Les1ie
    Oct 7, 2018
    5
    为什么大家都要用正则 ..
    ```
    source = "0123456789"
    result = ''
    for order, ch in enumerate(source):
    result += ch
    if order % 2:
    result += ' '
    print(result)

    ```

    虽然我这样写总感觉不是很优雅
    whoami9894
    whoami9894
    Oct 7, 2018
    6
    >>> f = lambda a : ' '.join([a[i:i+2] for i in range(0, len(a), 2)])
    >>> f("12343463463452523523534634643")
    '12 34 34 63 46 34 52 52 35 23 53 46 34 64 3'
    tribute
    tribute
    Oct 7, 2018 via Android
    7
    @Les1ie 因为正则比较快,比较方便
    lcdtyph
    lcdtyph
    Oct 7, 2018 via iPhone
    8
    ' '.join([a+b for a,b in zip(s[::2],s[1::2])])
    奇数个字符就单独处理一下最后一个字符
    或者用 izip_longest
    herozhang
    herozhang
    Oct 7, 2018
    9
    需求不是很明确,是从左向右,还是从右向左?
    zzj0311
    zzj0311
    Oct 7, 2018 via Android
    10
    怎么说遍历插空格也行吧。。
    xxx749
    xxx749
    Oct 7, 2018 via Android
    11
    正则又怎么了?
    mathzhaoliang
    mathzhaoliang
    Oct 7, 2018
    12
    一句话的事情:

    return " ".join(s[i: i+2] for i in range(0, len(s), 2))
    keenkiller
    keenkiller
    Oct 7, 2018 via Android
    13
    这题也太简单了。。
    mathzhaoliang
    mathzhaoliang
    Oct 7, 2018
    14
    @mathzhaoliang 不对,长度奇数没有考虑进去
    weyou
    weyou
    Oct 8, 2018
    15
    @mathzhaoliang slice 对超过范围的 index 也是可以处理的,所以奇数长度是没有问题的
    ltoddy
    ltoddy
    Oct 8, 2018
    16
    @Les1ie source[::2]
    JerryV2
    JerryV2
    Oct 8, 2018
    17
    正则快? 比切片还快?
    mathzhaoliang
    mathzhaoliang
    Oct 8, 2018
    18
    @weyou 是的,谢谢指出。
    des
    des
    Oct 8, 2018 via Android
    19
    @JerryV2 写的快吧,也没人说是跑得快
    annielong
    annielong
    Oct 8, 2018
    20
    关键正则这玩意儿是难者不会会者不难,
    JerryV2
    JerryV2
    Oct 8, 2018
    21
    正则很好,但是请在合适的时候使用它
    这么个简单的东西没必要上正则,不见得写正则会比写切片快,论执行速度,更是不可能比切片快
    说正则快,不过是懒得思考,来个东西,正则能做,就用正则了
    也许说的有点多了,不喜欢看的人就直接跳过好了
    yufpga
    yufpga
    Oct 8, 2018
    22
    s = '010609162526'
    result = [s[i:i+2] for i in range(0, len(s), 2)]
    gowk
    gowk
    Oct 8, 2018 via Android❤️1
    23
    我觉得吧,不是我打击新人,这种能 google 出来的就不要发帖了,这都解决不了,你也不适合做程序员
    wizardoz
    wizardoz
    Oct 8, 2018
    24
    ' '.join([a+b for a,b in zip(s[0::2], s[1::2])])
    cbiqih
    cbiqih
    Oct 8, 2018
    25
    import re

    number = "123456789"
    result = re.findall("\d{1,2}", number)

    print(result) # ['12', '34', '56', '78', '9']
    imn1
    imn1
    Oct 8, 2018
    26
    如果「没想到优雅写法」还好说
    「没想出来」就很糟糕了,因为实在太多方法了,一个都没想到?
    xpresslink
    xpresslink
    Oct 8, 2018❤️1
    27
    真正用 Python 的人思维方式应该是这样的:

    >>> import textwrap
    >>> ' '.join(textwrap.wrap(text='010609162526', width=2))
    '01 06 09 16 25 26'
    Les1ie
    Les1ie
    Oct 8, 2018
    28
    @ltoddy 想到了用 s[::2] 然而当时没想到用 join.. 于是退一步写了+=
    laqow
    laqow
    Oct 8, 2018 via Android
    29
    这个是在黑这么简单的东西 python 怎么写性能都低的吧
    a494836960
    a494836960
    Oct 8, 2018
    30
    /(\w{2})(?!\b)/g
    a494836960
    a494836960
    Oct 8, 2018
    31
    js '1123123qweqw'.replace(/(\w{2})(?!\b)/g,'$1 ')
    vimiix
    vimiix
    Oct 8, 2018
    32
    看样子是一组双色球号码~~
    woodensail
    woodensail
    Oct 8, 2018
    33
    @JerryV2 正则本身就不是强调执行速度快,而是开发效率高。
    woodensail
    woodensail
    Oct 8, 2018
    34
    一般的做法是这类需求正则方便做就先正则顶着,然后 profile 后针对热点区域的正则进行优化或换用其他方式实现。
    JCZ2MkKb5S8ZX9pq
    JCZ2MkKb5S8ZX9pq
    Oct 8, 2018
    35
    我觉得切片比较好。不过提供个不同的思路玩玩
    ''.join([''.join(i) for i in zip(s, ['', ' '] * len(s))])
    zjlletian
    zjlletian
    Oct 8, 2018
    36
    @gowk 其实这个看似简单的问题,实际上也有很多学问,虚心点看看别人怎么写的不好么?
    lsj8924
    lsj8924
    Oct 9, 2018
    37
    对不住老铁们了,我是一个正则患者。
    ![]( )
    mingyun
    mingyun
    Oct 14, 2018
    38
    @lsj8924 这个 6
    xiii1991
    xiii1991
    Oct 16, 2018 via iPhone
    39
    我们也可以直接手打着一串东西,然后直接 print ?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4994 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 82ms · UTC 07:14 · PVG 15:14 · LAX 23:14 · JFK 02:14
    ♥ Do have faith in what you're doing.