Pythonで文字列を指定サイズ(N文字)ごとに分割する方法
問題の概要
文字列 s と整数 n が与えられたとき、s を n 文字ずつの部分文字列に分割することを考えます。
例えば、入力が s = "abcdefghijklmn"、n = 4 の場合、出力は ['abcd', 'efgh', 'ijkl', 'mn'] となります。最後の断片が n 文字に満たない場合でも、残りの文字列がそのまま出力される点に注意してください。
解決のアプローチ
この問題は、以下の手順で解くことができます。
- インデックス
iを 0 で初期化します。 - 結果を格納するための空のリスト
fを用意します。 iが文字列の長さ未満である間、次の処理を繰り返します。s[i : i+n](インデックス i から i+n-1 まで)をリスト f の末尾に追加します。iに n を加算します。
- 最後にリスト f を返します。
実装例
それでは、実際のコードを見てみましょう。
class Solution:
def solve(self, s, n):
i = 0
f = []
while(i < len(s)):
f.append(s[i:i+n])
i += n
return(f)
ob = Solution()
print(ob.solve("abcdefghijklmn", 4))
入力
"abcdefghijklmn", 4
出力
['abcd', 'efgh', 'ijkl', 'mn']
別の方法:リスト内包表記を使う
while ループの代わりに、Python のリスト内包表記と range() 関数を組み合わせると、より簡潔に記述できます。
def solve(s, n):
return [s[i:i+n] for i in range(0, len(s), n)]
print(solve("abcdefghijklmn", 4))
# ['abcd', 'efgh', 'ijkl', 'mn']
range(0, len(s), n) は 0 から始まり n ずつ増加するインデックス列を生成するため、ループ処理を1行で表現できます。コードが短くなり可読性も向上するため、実務ではこちらの書き方が好まれることが多いです。
まとめ
文字列を固定長で分割する際のポイントは、スライス s[i:i+n] を活用することです。Python のスライスは指定範囲が文字列の長さを超えてもエラーにならず、自動的に末尾まで切り出してくれるため、端数の文字列も安全に処理できます。状況に応じて while ループとリスト内包表記を使い分けましょう。
-
Pythonで文字列を空白で分割する方法:split()と正規表現の使い方
Pythonでは、文字列を空白(スペース・タブ・改行など)で分割する場面がよくあります。ユーザー入力の解析やテキストデータの処理などがその代表例です。この記事では、空白で文字列を分割する代表的な2つの方法を、具体例とともにわかりやすく解説します。 方法1:split()メソッドを使う(おすすめ) 最もシンプルで一般的な方法は、文字列クラスに組み込まれた split() メソッドを使うことです。引数を指定しない場合、デフォルトの区切り文字として「空白文字」が使用され、連続した空白も自動的に適切に処理されます。 >>> Please split this string.spli
-
Pythonで改行コードを基準に文字列を分割する方法
Pythonで改行コードを基準に文字列を分割する方法 Pythonでは、文字列クラスに標準で用意されている splitlines() メソッドを使うことで、改行を区切りとして文字列を簡単にリストへ分割できます。ここでは、代表的な2つの方法とその違いを解説します。 1. splitlines() メソッドを使う方法 splitlines() は、改行の位置で文字列を自動的に分割し、各行を要素とするリストを返します。最もシンプルで推奨される方法です。 >>> some multi line string.splitlines() [some, multi line, strin