Python3中如何实现每两位数字插入一个空格
010609162526
变成
01 06 09 16 25 26
没想出来该怎么做??
Python3中如何实现每两位数字插入一个空格
https://blog.csdn.net/guaguastd/article/details/43525923
方法应该有很多的,链接使用的是正则分割
ps.答案是百度出来的
def insert_space_every_two(s): “”“在字符串s中,从右往左每两位插入一个空格”"" # 反转字符串,方便从左到右处理 s_rev = s[::-1] # 每两位切片并插入空格 spaced_rev = ’ '.join(s_rev[i:i+2] for i in range(0, len(s_rev), 2)) # 反转回原顺序 return spaced_rev[::-1]
示例
num_str = “1234567890” result = insert_space_every_two(num_str) print(result) # 输出: “12 34 56 78 90”
如果输入可能包含非数字字符,且需要处理:
def insert_space_every_two_general(s): # 移除非数字字符(可选) digits = ‘’.join(filter(str.isdigit, s)) return insert_space_every_two(digits)
示例
mixed_str = “abc123xyz456” result = insert_space_every_two_general(mixed_str) print(result) # 输出: “12 34 56”
更简洁的一行版本(纯数字字符串):
result = ’ '.join(num_str[i:i+2] for i in range(0, len(num_str), 2)) print(result) # 输出: “12 34 56 78 90”
总结:用切片和join就能搞定。
这也需要发贴问吗……
这玩意儿为啥要正则,搜搜 python 怎么 chunk 字符串不好吗?
为什么大家都要用正则 …<br>source = "0123456789"<br>result = ''<br>for order, ch in enumerate(source):<br> result += ch<br> if order % 2:<br> result += ' '<br>print(result)<br><br>
虽然我这样写总感觉不是很优雅
>>> 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’
因为正则比较快,比较方便
’ '.join([a+b for a,b in zip(s[::2],s[1::2])])
奇数个字符就单独处理一下最后一个字符
或者用 izip_longest
需求不是很明确,是从左向右,还是从右向左?
怎么说遍历插空格也行吧。。
正则又怎么了?
一句话的事情:
return " ".join(s[i: i+2] for i in range(0, len(s), 2))
这题也太简单了。。
不对,长度奇数没有考虑进去
slice 对超过范围的 index 也是可以处理的,所以奇数长度是没有问题的
source[::2]
正则快? 比切片还快?
是的,谢谢指出。
写的快吧,也没人说是跑得快
关键正则这玩意儿是难者不会会者不难,
正则很好,但是请在合适的时候使用它
这么个简单的东西没必要上正则,不见得写正则会比写切片快,论执行速度,更是不可能比切片快
说正则快,不过是懒得思考,来个东西,正则能做,就用正则了
也许说的有点多了,不喜欢看的人就直接跳过好了
s = '010609162526’
result = [s[i:i+2] for i in range(0, len(s), 2)]
我觉得吧,不是我打击新人,这种能 google 出来的就不要发帖了,这都解决不了,你也不适合做程序员
’ '.join([a+b for a,b in zip(s[0::2], s[1::2])])
import re
number = “123456789"
result = re.findall(”\d{1,2}", number)
print(result) # [‘12’, ‘34’, ‘56’, ‘78’, ‘9’]
如果「没想到优雅写法」还好说
「没想出来」就很糟糕了,因为实在太多方法了,一个都没想到?
真正用 Python 的人思维方式应该是这样的:
>>> import textwrap
>>> ’ '.join(textwrap.wrap(text=‘010609162526’, width=2))
‘01 06 09 16 25 26’
想到了用 s[::2] 然而当时没想到用 join… 于是退一步写了+=
这个是在黑这么简单的东西 python 怎么写性能都低的吧
/(\w{2})(?!\b)/g
js ‘1123123qweqw’.replace(/(\w{2})(?!\b)/g,’$1 ')
看样子是一组双色球号码~~
正则本身就不是强调执行速度快,而是开发效率高。
一般的做法是这类需求正则方便做就先正则顶着,然后 profile 后针对热点区域的正则进行优化或换用其他方式实现。
我觉得切片比较好。不过提供个不同的思路玩玩
‘’.join([’’.join(i) for i in zip(s, [’’, ’ '] * len(s))])
其实这个看似简单的问题,实际上也有很多学问,虚心点看看别人怎么写的不好么?
对不住老铁们了,我是一个正则患者。

这个 6
我们也可以直接手打着一串东西,然后直接 print ?


