みなさんコードを書いていて、文字列であったり、数値であったり連結させたいな、という場面に出会ったことはありませんか?
文字列であれば+を使ったり、for文で回したりすることをまず考えると思います。ですが、Pythonには連結させるためのjoinという関数が用意されており、それを使えばfor文などを書かなくても連結可能です。なので今回は
- そもそもjoinとは何か
- joinで文字列を連結
- joinで数値を連結
- joinでpathを連結
- 連結だけではなく分割するsplitの使い方
といったことを丁寧に解説するのでPythonで手軽に連結させたいという方は是非参考にしていただければ幸いです!
※ この記事のコードはPython 3.7, Ubuntu 18.04で動作確認しました。
本記事を読む前に、Pythonがどんなプログラミング言語なのかをおさらいしておきたい人は次の記事を参考にしてください。
→ Pythonとは?特徴やできること、活用例をわかりやすく簡単に解説
なお、その他のPythonの記事についてはこちらにまとめています。
joinとは?
joinとは英語で結合するという意味です。その意味通り、文字列や数値、pathなどを結合する時に使う関数です。
リストの中身だけをくっつけて、出力させたかったり、区切る文字を自由に決めたかったりするときに使えるのがこのjoin関数なのです。
joinの使い方
それではjoinの使い方を説明していきます。joinでは様々なものを連結させることができます。今回は、
- 文字列
- 数値
- パス
について見ていきましょう。
joinで文字列を扱う
例えば以下のような文字列があったとしましょう。
test = ['ab','c','de']
例えばこのリストの中身を連結させて表示させようと思ったとき、
test = ['ab', 'c', 'de'] result = ' ' for x in test: result += x print(result)
実行結果
abcde
このようなfor文を多くの人が考えるのではないでしょうか?
ですが、ただ連結させるだけで何行もコードを書くのはめんどくさいですよね。実はこのjoin関数を使えばたったの一行で連結させることが可能です。join関数は、”.join(リスト名)で使うことができます。実際にコードを見てみましょう。
test = ['ab', 'c', 'de'] result = ''.join(test) print(result)
実行結果をみてみると
abcde
はい、一発で結合できました。因みに’’の間に好きな文字を入れることでその文字を区切り文字にすることができます。例えば”,”を区切り文字に使いたかった場合
test = ['ab', 'c', 'de'] result = ','.join(test) print(result)
としてやると、
ab,c,de
という風に区切り文字を自在に指定できます。
map関数で数値を扱う
文字列は連結できたけど、数値はどうでしょうか。実際にみてみましょう。
list = ['ab', 'c', 'de',4] result = ''.join(list) print(result)
リストに数値を混ぜてみると、
Traceback (most recent call last): File "sample.py", line 2, in <module> result = ''.join(list) TypeError: sequence item 3: expected str instance, int found
という風にエラーが返ってきてしまいます。そのようなときは数値を一度文字列に変換してやる必要があります。変換すると言っても簡単でmap関数を使うことにより変換できます。
書き方はmap(使用する関数, リストの名前)としてやることで、指定されたリストに関数を充てることができます。コードを見てみると、
test = ['ab', 'c', 'de',4] map_result = map(str, test) result = ''.join(map_result) print(result)
こうなり、文字列に変換するstr関数をlistに充てていますね。結果を見てみると
実行結果
abcde4
はい、きちんとjoinできています。
os.path.joinでpathを扱う
次はjoinを用いてpathを連結させる方法も紹介します。WindowsやMacなど使う実行環境によってPathの様々な問題が発生して困ったことはないでしょうか?
このos.path.joinを使えばそんなpathの問題は一発で解決してくれ、実行環境に合ったpathに連結してくれます。書き方は今まで通りなのですが、注意する点はos.を使うため、最初にosをimportしておくことと、引数は*に続けて与えることです。
実際にみてみましょう。
import os test = ['/usr/', 'local/',"bin"] a = os.path.join(*test) print(a)
リストにpathを入れておき引数は*に続けて与えていますね。結果を見てみると、
実行結果
/usr/local/bin
うまく結合しています。では次は連結の仕方はわかったけど分割はできないの?連結に分割はつきものじゃないの?と思う方もいると思うので、今度は分割のさせかたについてみていきましょう。
splitで分割する
連結とは逆に分割するにはsplit関数を使います。split関数は文字列.split(“区切る文字”)という書き方で書きます。少しややこしいので実際に例を挙げてみましょう。
a = "ab,c,de" sep = a.split(",") print(sep)
このようなコードがあった場合引数には区切りたい場所の文字をいれます。この場合は、”,”を引数に与えているので”,”のポイントで区切ることになり結果は
['ab', 'c', 'de’]
こうなります。例えば
a = "abcdcba"
このようなコードをdを境に分割したいなと思ったら
a = "abcdcba" sep = a.split("d") print(sep)
引数には(“d”)を与え結果は、
実行結果
['abc', 'cba’]
こうなります。joinとは違いsplitは引数に区切り文字を与えるということですね。先程説明したmap関数などを使えば数値なども分割することができます。
詳しくspiltについても勉強したいという熱心な方は
こちらに大変詳しく解説されているので参考にしてみてください。
まとめ
いかがでしたでしょうか?Pythonによる要素の連結分割はマスターしていただけましたか?
連結するときは、’区切り文字’.join(リスト名)でリストの連結、数値が含まれている場合はmap(str関数, リスト名)で文字列に変換、pathを連結するときは、os.path.joinで引数は”*”に続けて書くんでしたね。
分割するときは、split関数を使い引数に区切り文字を与えるということも大事でしたね。連結したり分割したりは良くする作業なので是非マスターして効率的なスクリプトが書けるようになってください!それでは!