データには様々な形があり、文字列として表現されることが多い。
CSVファイルであれ、入力テキストであれ、文字列を分割して特徴や要素のリストを取得することがよくあります。
このガイドでは、文字列を分割する方法について説明します。
このガイドでは、Pythonの split()
メソッドを使って、文字列をリストに分割する方法を説明します。
>
>
>
Pythonで文字列をリストに分割する
文字列クラスの split()
メソッドは非常に簡単です。これは、デリミタを与えて文字列を分割し、文字列から分割された要素からなるリストを返します。
デフォルトでは、デリミタは空白に設定されています。したがって、デリミタの引数を省略すると、文字列は空白ごとに分割されることになります。
それでは、split()
メソッドの動作を見てみましょう。
string = "Age,University,Name,Grades"
lst = string.split(',')
print(lst)
print('Element types:', type(lst[0]))
print('Length:', len(lst))
この文字列はCSVファイルのようにカンマで区切られた要素を持っているので、デリミタを適切に設定しました。
この結果、他のどんな型を表すことができるかにかかわらず、str
型の要素のリストが得られます。
['Age', 'University', 'Name', 'Grades']
Element types: <class 'str'="">
Length: 4
文字列をリストに分割し、空白を削除し、大文字を変更する
すべての入力文字列がきれいなわけではありません。したがって、常に完璧にフォーマットされた文字列を分割できるわけではありません。時には、「最終製品」に含まれるべきではない空白文字が含まれていたり、大文字と小文字の不一致があったりすることがあります。
ありがたいことに、このリストとその中の各要素を分割した後に処理するのはとても簡単なことなのです。
# Contains whitespaces after commas, which will stay after splitting
string = "age, uNiVeRsItY, naMe, gRaDeS"
lst = string.split(',')
print(lst)
この結果、次のようになる。
['age', ' uNiVeRsItY', ' naMe', ' gRaDeS']
だめですね。各要素は空白で始まり、要素は全く正しく大文字で書かれていません。リストの各要素に関数を適用するのは、単純な for
ループで簡単にできます。そこで、 strip()
/trim()
(空白を取り除く) と大文字化関数を適用したいと思います。
最初の文字を大文字にするだけでなく、残りの文字も小文字にします (適合性を高めるためです)。
def capitalize_word(string):
return string[:1].capitalize() + string[1:].lower()
このメソッドは文字列を受け取り、最初の文字でスライスしてそれを大文字にします。残りの文字列は小文字に変換され、変更された2つの文字列が連結されます。
このメソッドはループ内でも使用できるようになりました。
string = "age, uNiVeRsItY, naMe, gRaDeS"
lst = string.split(',')
lst = [s.strip() for s in lst]
lst = [capitalize_word(s) for s in lst]
print(lst)
print('Element types:', type(lst[0]))
print('Length:', len(lst))
この結果、きれいな
['Age', 'University', 'Name', 'Grades']
Element types: <class 'str'="">
Length: 4
文字列をリストに分割し、整数に変換する。
文字列で表現された整数のリストを扱う場合はどうなるのでしょうか。分割した後は、表向きは文字列なので、整数演算はできません。
ありがたいことに、先ほどと同じ for
ループを使って、要素を整数に変換することができます。
string = "1,2,3,4"
lst = string.split(',')
lst = [int(s) for s in lst]
print(lst)
print('Element types:', type(lst[0]))
print('Length:', len(lst))
この結果、次のようになります。
[1, 2, 3, 4]
Element types: <class 'int'="">
Length: 4
リミッターを使用して文字列をリストに分割する
デリミタのほかに、split()
メソッドではリミッタ (分割の回数) を指定することができます。
リミッターは整数で、デリミターの後に定義されます。
string = "Age, University, Name, Grades"
lst = string.split(',', 2)
print(lst)
ここでは、最初と二番目のコンマで二回分割し、それ以降は分割しないようにしています。
['Age', ' University', ' Name, Grades']
結論
この短いガイドでは、Pythonで文字列をリストに分割する方法について学びました。
また、文字列をリストに分割するのと並行して、簡単な処理として空白をトリミングし、大文字を修正する方法を学びました。
</class