pythonの文字列メソッドまとめ
Pythonのstr型は次のような特徴を持っています。
- シーケンス
- イミュータブル(変更不可能、ただし変更したコピーを返す形では変換できる)
- 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割ぐらいしか解けないぐらいです。
写経材料
やり方
・とりあえず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時間ぐらいで終わってしまい、適切な難易度・長さのサンプルコードもなかなか見つからないので写経だけで勉強するのは難しいと思った。
pythonでアルファベットからなるリストを作る方法
昨日からCheckiOというプログラミングのpythonのゲームで遊んでいます。
先程「シーザー暗号を作れ」という問題が出ました。
シーザー暗号は単一換字式暗号の一種で、平文の各文字を、辞書順に3文字分シフトして暗号文を作る暗号である Wikipediaより
要はアルファベットの全文字を何文字かずつずらして作った暗号です。例えば3文字ずらすならa→d、b→eのようになります。
この問題を解くためにアルファベットのリストを作ろうとしたんですが、「"」と「,」を何十回も押すのがだるすぎたんで簡単に作る方法を調べました
結論から言うと組み込み関数のchrを使います
chr(整数):Unicodeコードポイントがその数である文字列を返す。
組み込み関数についてはこちらの記事も参考にしてください。
- 大文字のアルファベットのリスト["A","B",..."Z"]
[chr(i) for i in range(65,91)]
- 小文字のアルファベットのリスト["a","b",..."z"]
[chr(i) for i in range(97,123)]
ポイントは
- リスト内包表記を使うこと
- それぞれの文字にUnicodeコードポイントという数字があること(この数字は組み込みのord()関数を用いて知ることができる)
です。ちなみに大文字の方がコードポイントが若いので大文字と小文字の要素を持つリストにsort()関数を使うと1文字目が大文字のものの方が先に来ます。
ローカル開発環境とは何か?
僕はここ3日ぐらいこの本でpythonを使ったクローリングとスクレイピングの勉強をしています。
Pythonクローリング&スクレイピング -データ収集・解析のための実践開発ガイド-
- 作者: 加藤耕太
- 出版社/メーカー: 技術評論社
- 発売日: 2016/12/16
- メディア: 大型本
- この商品を含むブログ (3件) を見る
クローリング =Webページのハイパーリンクをたどって次々にWebページをダウンロードする作業。
スクレイピング=ダウンロードしたWebページから必要な情報を抜き出す作業。
この本の付録に「Vagrantによる開発環境の構築」という章があるのですが、僕は今まで「インストールは全て本の指示通りにAnaconda、コードを書くのは全部Jupyter Notebook上」というとても楽なやり方をしていたので全然わかりませんでした。
そこで開発環境とは何で、何のためにあるのかを調べたのでここにまとめておきます。
間違いがあったらご指摘お願いします。
1、ローカル開発環境とは何のために作るのか?
・自分のアプリケーションやホームページなどの作品(この本の場合はクローラ)を手元のパソコンから24時間インターネットにつなげるのは難しい。
・そのため常にインターネットに接続してあるサーバーを借りる必要がある。
・しかしレンタルサーバーはLinuxというOSを使っていることが多く自分のパソコンのWindowsやOS Xで作ったものをそのまま移すと機能しない可能性がある。
・そのため自分のパソコンの中にLinuxというOSを使うローカルな開発環境を作る必要がある。
*開発環境とは何かを開発するために自分のパソコンの中で作った環境、本番環境とは実際に渡すサーバーが使っている環境のことを指す。
2、ローカル開発環境はどういう時に必要か。
ローカル開発環境を作る必要があるのは主にWebサービスを作る時です。そのためPHPやRubyでWeb開発を勉強する人は知っている必要があります。またSQLなどでデータベースを扱う際もローカルな環境は必要になります。
3、ローカル開発環境を勉強しているとよく出てくる言葉の意味
- Virtual box
オラクルが無料で提供している、仮想環境を構築するためのソフトウェア。
Virtual boxなどで作った開発環境を簡単なコマンドで扱えるようにするためのツール。
- Cent OS
Linuxの一種。サーバーを構築する時に使われることが多い。