Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python】文字列を1行あたりK文字の行列に変換する方法

Pythonでは、文字列を「1行あたりK文字」の行列(リストのリスト)に変換したいケースがあります。このような場合、リスト内包表記スライス操作を組み合わせた関数を定義するだけで、簡潔かつ効率的に実現できます。

処理の仕組み

基本的な考え方は以下の通りです。

  • range(0, len(文字列), K) を使って、0から始まりK刻みで進むインデックスを生成します。
  • 各インデックスを起点に 文字列[index : index + K] というスライスで、K文字ずつ部分文字列を取り出します。
  • 取り出した各部分文字列を list() で個々の文字に分解し、行列(ネストされたリスト)として組み立てます。

なお、文字列の長さがKの倍数でない場合、最終行は残りの文字だけで構成されます。

サンプルコード

以下に具体的な実装例を示します。

def convert_to_matrix(my_string, my_key):
   temp = [my_string[index: index + my_key] for index in range(0, len(my_string), my_key)]

   my_result = [list(element) for element in temp]

   print(my_result)

my_string = 'Python is fun'

print("The string is :")
print(my_string)

K = 7
print("The value of K is :")
print(K)

print("The result is :")
convert_to_matrix(my_string, K)

出力結果

The string is :
Python is fun
The value of K is :
7
The result is :
[['P', 'y', 't', 'h', 'o', 'n', ' '], ['i', 's', ' ', 'f', 'u', 'n']]

コードの解説

  • 関数の定義: 「convert_to_matrix」という名前の関数を定義し、文字列(my_string)とキー値(my_key)を引数として受け取ります。
  • スライスによる分割: リスト内包表記の中でスライスを使用し、文字列をK文字ずつの部分文字列に分割します。
  • 行列への変換: 分割された各部分文字列を list(element) で1文字ずつの要素を持つリストに変換し、結果を変数に代入します。
  • 結果の出力: 完成した行列をコンソールに表示します。
  • 関数の外側の処理: 対象となる文字列とKの値を定義してコンソールに表示した後、必要なパラメータを渡して関数を呼び出し、最終的な結果を出力します。

まとめ

このように、リスト内包表記とスライスを活用すれば、わずか数行のコードで文字列を行単位の行列へ変換できます。テキストデータの整形やパズル的な問題の処理など、さまざまな場面で応用できるテクニックなので、ぜひ覚えておきましょう。

  1. Pythonで文字のリストを文字列に変換する方法を解説

    Pythonでは、リスト内の個々の要素をひとつの文字列にまとめたい場面がよくあります。たとえば、データを保存したり送信したりする際に必要となるシリアライズ(直列化)の処理では、このような変換が非常に役立ちます。具体的には、次のような変換を指します。[h, e, l, l, o, , w, o, r, l, d] → hello worldjoinメソッドを使った変換Pythonには、このような変換を実現するためのjoin()メソッドが標準で用意されています。joinメソッドは、区切り文字(デリミタ)として使う文字列に対して呼び出し、引数に渡したリストの各要素を連結します。今回は各文字をつなげ

  2. 【Python入門】文字のリストを文字列に変換する方法

    Pythonのjoin()メソッドとは Pythonには、リストやタプルなどのシーケンスオブジェクトの要素を連結して1つの文字列を返す、組み込みのjoin()メソッドが用意されています。join()は、呼び出し元の文字列を「区切り文字」として要素間に挿入しながら連結を行います。そのため、区切り文字なしで単純に連結したい場合は、空文字列()に対してjoin()を呼び出します。 基本的な使い方:区切り文字なしで連結する 以下の例では、文字のリスト [h, e, l, l, o] を空文字列で連結し、「hello」という1つの文字列に変換しています。 >>> lst=[h,e,l