Pythonで文字列を均等な長さに分割する方法【itertools活用】
このチュートリアルでは、指定した文字列を均等な長さの部分文字列に分割するプログラムを作成します。まず、具体的な例を見てみましょう。
入力例
string = 'Tutorialspoint' each_part_length = 5
出力例
Tutor ialsp ointX
文字列の長さが各部分の長さで割り切れない場合、余った部分はfillvalueで指定した文字(ここでは「X」)で埋められます。
入力例
string = 'Tutorialspoint' each_part_length = 6
出力例
Tutori alspoi ntXXXX
この結果を実現するために、itertoolsモジュールのzip_longestメソッドを使用します。
zip_longestメソッドとは
zip_longestメソッドは、イテレータを引数として受け取ります。また、文字列を分割する際の埋め合わせ用としてfillvalueを渡すこともできます。このメソッドは、同じ数の文字を含むタプルのリストを返します。
zip_longestは、渡されたイテレータの中で最も長いものが使い果たされるまで、反復ごとにタプルを返します。そして、そのタプルには各イテレータから指定した長さ分の文字が格納されます。
コード例1:5文字ずつ分割
# itertoolsモジュールをインポート
import itertools
# 文字列と分割する長さを初期化
string = 'Tutorialspoint'
each_part_length = 5
# 必要な数のイテレータを作成
iterator = [iter(string)] * each_part_length
# zip_longestを使って分割
result = list(itertools.zip_longest(*iterator, fillvalue='X'))
# タプルのリストを文字列に変換して出力
print(' '.join([''.join(item) for item in result]))
実行結果
上記のコードを実行すると、次の出力が得られます。
Tutor ialsp ointX
コード例2:6文字ずつ分割
# itertoolsモジュールをインポート
import itertools
# 文字列と分割する長さを初期化
string = 'Tutorialspoint'
each_part_length = 6
# 必要な数のイテレータを作成
iterator = [iter(string)] * each_part_length
# zip_longestを使って分割
result = list(itertools.zip_longest(*iterator, fillvalue='X'))
# タプルのリストを文字列に変換して出力
print(' '.join([''.join(item) for item in result]))
実行結果
上記のコードを実行すると、次の出力が得られます。
Tutori alspoi ntXXXX
まとめ
このように、itertoolsモジュールのzip_longestメソッドを使えば、文字列を任意の長さで均等に分割することができます。文字列が割り切れない長さの場合も、fillvalueを指定することで柔軟に対応できます。
このチュートリアルについて不明な点がある場合は、コメント欄でお気軽にお尋ねください。
-
Pythonで改行コードを基準に文字列を分割する方法
Pythonで改行コードを基準に文字列を分割する方法 Pythonでは、文字列クラスに標準で用意されている splitlines() メソッドを使うことで、改行を区切りとして文字列を簡単にリストへ分割できます。ここでは、代表的な2つの方法とその違いを解説します。 1. splitlines() メソッドを使う方法 splitlines() は、改行の位置で文字列を自動的に分割し、各行を要素とするリストを返します。最もシンプルで推奨される方法です。 >>> some multi line string.splitlines() [some, multi line, strin
-
Pythonで区切り文字(str)を指定して文字列を分割する方法
Pythonで文字列を特定の区切り文字で分割する方法は、主に2つあります。1つは文字列クラスの組み込みメソッド split() を使う方法、もう1つは正規表現モジュール re の re.split() を使う方法です。それぞれの使い方を詳しく見ていきましょう。 split()メソッドで文字列を分割する PythonのStringクラスには split() というメソッドが用意されており、区切り文字をオプション引数として指定できます。引数を省略した場合、デフォルトの区切り文字は空白(ホワイトスペース)になります。 >>> aa-ab-ca.split(-) [aa, ab, c