python n文字毎に文字列を分割

指定文字数(n)毎に文字列を分割する方法を示します。
具体的には、下記の処理です。
”12123″を2文字毎に分割し、”12″, “12”, “3”とする。

n文字毎に文字列を分割する方法

分割した文字列をリストに格納

n = 2 
s = "12123"
l = [s[i:i+n] for i in range(0,len(s), n)]
print(l)
"""出力
['12', '12', '3']
"""

分割した文字列を出力

n = 2 
s = "12123"
for i in range(0,len(s), n):
  print(s[i:i+n])
"""出力
12
12
3
"""

n文字毎に文字列を分割できる理由

本記事で使用した「for i in range(0,len(s), n)」により、文字列を分割できる理由を説明します。
s[i:j]は、j>len(s)の場合にjの代わりにlen(s)が使用されます。つまり、下記です。

j>len(s)の場合、 s[i:j]はs[i:len(s)]となる。

上記挙動により、s[i:i+n]のi+nがlen(s)より大きくなった場合もインデックスが範囲外になりませんでした。

下記、公式ドキュメントの説明です。

s の i から j へのスライスは i <= k < j となるようなインデックス k を持つ要素からなるシーケンスとして定義されます。 i または j が len(s) よりも大きい場合、 len(s) を使います。 i が省略されるか None だった場合、 0 を使います。 j が省略されるか None だった場合、 len(s) を使います。 i が j 以上の場合、スライスは空のシーケンスになります。

組み込み型 — Python 3.10.0b2 ドキュメント

参考

python – Split string every nth character? – Stack Overflow
本記事以外の方法

コメント

タイトルとURLをコピーしました