作者tsaiminghan (nahgnimiast)
看板Python
标题[闲聊] 把字串以固定长度分割
时间Fri Sep 4 23:58:41 2020
把字串以固定长度分割
'112233445566778899AA' => 以长度2分割
['11', '22', '33', '44', '55', '66', '77', '88', '99', 'AA']
我一开始只想到下面的方法
a='112233445566778899'
print ([a[i:i+2] for i in range(0, len(a), 2)])
後来在网路看到另一种方法,这方法我觉得很漂亮
还可以当iter用
def split(s, len):
while s:
yield s[:len]
s = s[len:]
print (list(split(a, 2)))
模仿上面,改用递回的方法,但比上面差多了,硬凑的
def split2(s, len):
if s:
return s[:len], *split2(s[len:], len)
return ()
def split2_1(s, len):
if s:
return [s[:len]] + split3(s[len:], len)
return []
print (split2(a, 2))
大约两种方向,一种直接slice切出特定位置
另一个就每次取开头,还有其它做法或简洁写法吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 220.136.108.49 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1599235124.A.22C.html
1F:→ TitanEric: 你这两个方法都不错 目前想不到其他的 09/05 01:23
2F:→ TitanEric: 另外我觉得generator那方法记index就好 感觉有点多余 09/05 01:24
3F:→ TitanEric: 虽然是蛮漂亮的 09/05 01:24
4F:→ jkchang: print (re.findall('.{1,2}', str)) 09/05 10:27
5F:→ jkchang: print (re.findall('[\d|A-Z]{1,2}', str)) 09/05 10:29
这两个没问题,可以看得懂,利用findall去产生list
也是属於想都没想过的方法
6F:→ jkchang: print (wrap(str, 2)) 09/05 10:30
wrap是什麽函式?
※ 编辑: tsaiminghan (220.136.92.240 台湾), 09/05/2020 22:17:54
7F:→ jkchang: from textwrap import wrap 09/06 09:15
8F:→ tsaiminghan: 谢谢 09/06 09:46