[閒聊] 把字串以固定長度分割

作者: tsaiminghan (tsaiminghan)   2020-09-04 23:58:41
把字串以固定長度分割
'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切出特定位置
另一個就每次取開頭,還有其它做法或簡潔寫法嗎?
作者: TitanEric (泰坦)   2020-09-05 01:23:00
你這兩個方法都不錯 目前想不到其他的另外我覺得generator那方法記index就好 感覺有點多餘雖然是蠻漂亮的
作者: jkchang (JK)   2020-09-05 10:27:00
print (re.findall('.{1,2}', str))print (re.findall('[\d|A-Z]{1,2}', str))print (wrap(str, 2))
作者: tsaiminghan (tsaiminghan)   2020-09-06 09:46:00
謝謝

Links booklink

Contact Us: admin [ a t ] ucptt.com