56
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Python】joinの正しい使い方

Posted at

学びたての認識

リストの要素(str)を連結・結合する際はjoinを使います。

>>> v = ["Hello", "Python"]
>>> "".join(v)
'HelloPython'

要素はstr型でなければいけません。

任意の文字列で連結可能です。

>>> s = ["A", "B", "C", "D"]
>>> "->".join(s)
'A->B->C->D'

リストだけじゃない

joinは引数として**iterableなオブジェクト(イテレータ)**を受け取ります。つまり、for文で回せるようなものなら引数として受け取ることができます。

リストもiterable(イテレータ)の一種で、例は先ほどあげました。

iterableなオブジェクトはその他にもいろいろあります。

  • tuple
  • dict
  • str
  • ジェネレータ式
  • mapオブジェクト
  • fileオブジェクト
  • その他さまざまな標準ライブラリの戻り値
  • 独自iterableクラス

tuple

>>> " ".join(("やせいの","ポッポ","","あらわれた!"))
'やせいの ポッポ が あらわれた!'

dict

dictはfor文で回すとキーが取り出されます。
itemsメソッドは、キーと値がタプルで取り出されるのでそのままではjoinできません。

>>> " ".join({"a": 2, "b": 3, "c": 5, "d": 7})
'a b c d'

str

strもiterableなのでjoinできます。

>>> "".join("ひみつ")
'ひ・み・つ'

ジェネレータ式

>>> "".join(str(c) for i in [0,90,1234,5678])
'09012345678'

たまにjoinにわざわざリスト内包表記を渡す人がいますが、ジェネレータ式が返すものはiterableなのでその必要はありません。
ジェネレータ式を使う方法は、リストに変換する処理が省かれるので、速度的にもメモリ的にも効率的です。

mapオブジェクト

>>> "".join(map(str, [0,90,1234,5678]))
'09012345678'

map関数の戻り値は、リストではなくmapオブジェクトというiterableなオブジェクトです。
list型に変更する必要はありません。

fileオブジェクト

open関数で生成されるfileオブジェクトはiterableです。for文で回すと一行ずつ取り出されます。

text.txt
函館
小樽
札幌
富良野
旭川
知床
>>> print("からの".join(open("text.txt")))
函館
からの小樽
からの札幌
からの富良野
からの旭川
からの知床

その他いろいろなイテレータ

  • range
    • rangeは要素がintなのでjoinできません。
  • filter関数の戻り値
  • accumulate関数の戻り値

など。


joinのほかにもiterableを引数に受け取る関数はたくさんあります。

  • filter
  • sorted
  • map
  • sum

どの関数がiterableを受け取るのかわからないと思います。そういうときは公式サイトを見るか、
PyCharmなどのIDEを使っている場合は予測変換でiterableと出ると思います。

56
48
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?