pythonの文字列メソッドまとめ

Pythonのstr型は次のような特徴を持っています。

  1. シーケンス
  2. イミュータブル(変更不可能、ただし変更したコピーを返す形では変換できる)
  3. r(right)やl(left)をメソッド名の頭につけた類似したメソッドを多く持つ

この記事ではPythonのstr型に使える操作をPythonの公式ドキュメント(4. 組み込み型 — Python 3.6.5 ドキュメント)からまとめました。これはPython3.6.5版でのものです。

 

シーケンス型に共通の操作

  • x in s
  • x not in s

これらは後述するfindメソッドやindexメソッド、countメソッドと同じ検索だが、「あるかないかが知りたいときは in 、インデックスが知りたいときはfindかindex、回数が知りたいときはcount」と使い分ける。

  • s + t 連結
  • s * n 繰り返し
  • s[i:j:k] スライス
  • len(s) 長さ
  • min(s)
  • max(s)

str型特有のメソッド(44個)

※このうちindex()とcount()はシーケンス型に共通ですが、メソッドなのでわかりやすさのためにこちらに入れました。

1文字列を判別するもの 13個

  • endswith(suffix)

文字列の終わりがsuffixならTrue,違ければFalseを返す。

  • startswith(preffix)

文字列の始まりがpreffixならTrue,違ければFalseを返す。

  • isalnum()

文字列全てが英数字&1文字以上→True

  • isalpha()

文字列全てが英字&1文字以上→True

  • isdecimal()

文字列全てが十進数字&1文字以上→True

  • isdigit()

文字列全てが数字&1文字以上→True

  • isidentifier()

文字列全てが有効な識別子→True

  • islower()

大小の区別がある字が存在&大文字がない→True

  • isnumeric()

文字列全てが数を表す(digitより条件が緩い)&1文字以上→True

  • isprintable()

文字列全てが印字可能or0文字→True

  • isspace()

文字列全てが空白文字&1文字以上→True

  • istitle()

タイトルケース文字列&1文字以上→True

  • isupper() 

大小の区別がある字が存在&小文字がない→True

 

2文字列を検索するもの 5個

※[ ]はその引数が任意なことを表す。

  • find(substring[,start[,end]])

文字列に部分文字列substringがあったら、そのインデックスが最小のもののインデックス、なければ-1を返す。検索範囲を指定できる。

  • index(substring[,start[,end]])

文字列に部分文字列substringがあったら、そのインデックスが最小のもののインデックス、なければValueErrorを返す。検索範囲を指定できる。

  • rfind(substring[,start[,end]])

文字列に部分文字列substringがあったら、そのインデックスが最大のもののインデックス、なければ-1を返す。検索範囲を指定できる。

  • rindex(substring[,start[,end]])

文字列に部分文字列substringがあったら、そのインデックスが最大のもののインデックス、なければValueErrorを返す。検索範囲を指定できる。

  • count(substring[,start[,end]])

文字列中に部分文字列substringが重複せずに出現する回数を返す。

3文字列を除去するもの 3個

  • strip([chars])

文字列の先頭および末尾からcharsを除いたコピーを返す。charsは取り除く文字列ではなく取り除く文字の集合。Ex: char=abcならaとbとcを取り除いていく。charsが省略されたら空白文字を取り除く。

  • lstrip([chars])

文字列の先頭からcharsを除いたコピーを返す。charsは取り除く文字列ではなく取り除く文字の集合。Ex: char=abcならaとbとcを取り除いていく。charsが省略されたら空白文字を取り除く。

  • rstrip([chars])

文字列の末尾からcharsを除いたコピーを返す。charsは取り除く文字列ではなく取り除く文字の集合。Ex: char=abcならaとbとcを取り除いていく。charsが省略されたら空白文字を取り除く。

4文字列の幅を整形するもの 4個

  • center(width)

widthの長さを持つ中央寄せされた文字列を返す。

  • ljust(width)

widthの長さを持つ左揃えされた文字列を返す。

  • rjust(width)

widthの長さを持つ右揃えされた文字列を返す。

  • zfill(width)

長さがwidthになるようにASCII'0'で左詰めした文字列のコピーを返す。

 

5文字列の大文字・小文字を操作するもの 6個

  • upper()

全ての大小文字の区別のある文字を大文字に変換したコピーを返す。

  • lower()

全ての大小文字の区別のある文字を小文字に変換したコピーを返す。

  • capitalize()

文字列の先頭を大文字、残りを小文字にする

  • title()

単語の先頭を大文字、残りを小文字にする。

  • casefold()

大文字小文字に関係ないマッチに使えるコピーを返す。

  • swapcase()

大文字が小文字に、小文字が大文字に変換された文字列のコピーを返す。

6文字列を分割するもの 5個

  • partition(sep)

文字列をsepの最初の出現位置で区切り、区切り前・区切り文字そのもの・区切り後の3要素から成るタプルを返す。

  • rpartition(sep)

文字列をsepの最後の出現位置で区切り、区切り前・区切り文字そのもの・区切り後の3要素から成るタプルを返す。

  • split(sep)

文字列をsepを区切り文字として区切った単語のリストを返す。キーワード引数maxsplitを与えることができる。

  • rsplit()

文字列をsepを区切り文字として右側から区切った単語のリストを返す。キーワード引数maxsplitを与えることができる。

  • splitlines()

文字列を改行部分で分解し、各行からなるリストを返す。

7文字列を変換するもの 7個

strからbytesへ
  • encode()

文字列のエンコードされたバージョンをバイト列オブジェクトとして返す。

tabからspaceへ
  • expandtabs()

文字列内のタブをスペースに変えたコピーを返す。

1:1対応の変換
  • maketrans()

静的メソッド。translateメソッドで使う変換テーブルを作る。

  • translate(table)

与えられた変換テーブルに基づいて文字列を構成する各文字をマッピングし、マッピング後の文字列のコピーを返す。

様々な書式に変換
  • format(*args,**kwargs)

文字列の書式化操作を行う。めっちゃ便利だけど規則が多いので、詳しいことは

6.1. string — 一般的な文字列操作 — Python 3.6.5 ドキュメント

の「6.1.3.1. 書式指定ミニ言語仕様」を見てください。

  • format_map()

formatと似た働きだけど引数がmappingの時にいいことがあるらしい。

特定のものに置き換え
  • replace(old,new)

文字列をコピーし、現れる部分文字列old全てをnewに置換して返す。

8文字列を作成するもの 1個

  • join(iterable)

joinをつける文字列を区切り文字としてiterableを連結し、str型を返す。"".join(iterable)なら区切りなしになる。これはstrへの操作というよりiterableへの操作と思った方が良さそう。

プログラミングに写経はどのくらい効果があるのか試してみた

よくプログラミングの勉強はひたすら写経するのがいいという話を見るので、実際にやってみて確かめることにしました。

 

現在の自身のレベル

 

僕の今のレベルはプログラミングを初めて3週目ぐらいで、CheckiOの問題でいうとElementary(一番簡単)が6割ぐらい、Simple(二番目に簡単)は3割ぐらいしか解けないぐらいです。

 

写経材料

github.com

www.programiz.com

 

やり方

・とりあえずjupyter notebookに写してみる

・分からないことがあったらみんなのPythonか公式ページで調べる

 

30-seconds-of-python-codeの感想

・30-seconds-of-python-codeはリスト、数学、オブジェクト、文字列に別れていて30個ある。一個一個は3〜10行ぐらいですぐ終わるがlambdaやrecursion(再帰)など難しいところもあった。

・「capitalize」にあった

string[1:].lower() if lower_rest else string[1:]

のように、自分で書く時より短くていい感じの書き方がわかった気がする。

Python Programming Examplesの感想

・最初の方はHello Worldや正負の判定のような簡単すぎるものなのでやらなくていいと思った。

・中盤は数学系の問題が多い。アームストロング数とかはそもそも存在を知らなかった。

・4つのテーマ(フィボナッチ数列、ある数までの自然数の和、階乗、10進数から2進数への変換)について普通にwhile文とかを使ってやる場合とrecursion(再帰)を使ってやる場合が載っていたのがとても勉強になった。

 

結論

上手い人の書き方を身につけるという点では役に立つと思った。ただ今回色々調べ物しながらでも4時間ぐらいで終わってしまい、適切な難易度・長さのサンプルコードもなかなか見つからないので写経だけで勉強するのは難しいと思った。

 

 

暇なバイトの時間を早く過ぎさせる

僕はこのゴールデンウィークある単純作業系のバイトをしてます。朝9時とかから始めて夕方5時とかに帰る生活をしているんですが、

 

時間が過ぎるのが遅すぎる!!!

 

まじで30分たっただろと思うと3分しか経ってないことが頻繁におきます。その苦行の中で少しでも体感時間を短くする方法を考えたので紹介します。

 

1、脳内で音楽を再生する

よく考えたら大抵の曲は4〜6分あります。てことはアルバム一つ分再生すればなんと40分も浮かせられます!単純作業系のバイトにとって40分が過ぎるのは至高の喜びです。脳内音楽にノッているだけでお金が入ってくると考えればこんなに素晴らしい時間はないですね。

2、帰りに何を買うか考える

やはり自分の時間を切り売りしている身としては帰りに何か楽しいことがないとやってられません。絶対に自分にご褒美を買いましょう。ご褒美といっても高いものだとお金が貯まらなくなってしまうので、「500円ぐらい」で「買う必要はないもの」がおすすめです。例えば駅によくあったりするちょっと高めのプリン・あんみつ・ゼリーとかはめっちゃいいです。何もない時に買うとお金を浪費してる罪悪感が湧いてしまいますが、バイトに耐えたからと思えばとても幸せに味わえます。

3、時計を隠す

僕のしてるバイトはパソコン作業なんですが、画面の端に時間が表示されてしまうという大問題があります。そのせいでことあるごとに時間を見てしまい、進まない時間に絶望してしまいます。なので物理的に時間は見れないようにしましょう!僕はウィンドウを時刻の上に持っていって見れないようにしたことで時間の経過スピードが2倍になりました(当社比)

pythonでアルファベットからなるリストを作る方法

昨日からCheckiOというプログラミングのpythonのゲームで遊んでいます。

先程「シーザー暗号を作れ」という問題が出ました。

 

シーザー暗号は単一換字式暗号の一種で、平文の各文字を、辞書順に3文字分シフトして暗号文を作る暗号である Wikipediaより 

 要はアルファベットの全文字を何文字かずつずらして作った暗号です。例えば3文字ずらすならa→d、b→eのようになります。

 

この問題を解くためにアルファベットのリストを作ろうとしたんですが、「"」と「,」を何十回も押すのがだるすぎたんで簡単に作る方法を調べました

 

結論から言うと組み込み関数のchrを使います

chr(整数):Unicodeコードポイントがその数である文字列を返す。

 

組み込み関数についてはこちらの記事も参考にしてください。

imasak.hatenablog.com

  • 大文字のアルファベットのリスト["A","B",..."Z"]

[chr(i) for i in range(65,91)]

  • 小文字のアルファベットのリスト["a","b",..."z"]

[chr(i) for i in range(97,123)]

 

ポイントは

  1. リスト内包表記を使うこと
  2. それぞれの文字にUnicodeコードポイントという数字があること(この数字は組み込みのord()関数を用いて知ることができる)

です。ちなみに大文字の方がコードポイントが若いので大文字と小文字の要素を持つリストにsort()関数を使うと1文字目が大文字のものの方が先に来ます。