看板 Python 關於我們 聯絡資訊
把字串以固定長度分割 '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://www.ptt.cc/bbs/Python/M.1599235124.A.22C.html
TitanEric: 你這兩個方法都不錯 目前想不到其他的 09/05 01:23
TitanEric: 另外我覺得generator那方法記index就好 感覺有點多餘 09/05 01:24
TitanEric: 雖然是蠻漂亮的 09/05 01:24
jkchang: print (re.findall('.{1,2}', str)) 09/05 10:27
jkchang: print (re.findall('[\d|A-Z]{1,2}', str)) 09/05 10:29
這兩個沒問題,可以看得懂,利用findall去產生list 也是屬於想都沒想過的方法
jkchang: print (wrap(str, 2)) 09/05 10:30
wrap是什麼函式? ※ 編輯: tsaiminghan (220.136.92.240 臺灣), 09/05/2020 22:17:54
jkchang: from textwrap import wrap 09/06 09:15
tsaiminghan: 謝謝 09/06 09:46