1. Psyduck
Changes in body
Source | HTML | Preview
@@ -1,243 +1,243 @@
今回はPython3に置いての簡単な文字列操作について紹介したいと思います.
- [文字列に値を埋め込み](#文字列に値を埋め込み)
- [文字列の結合](#文字列の結合)
- [文字列の分割](#文字列の分割)
- [文字列の切り出し](#文字列の切り出し)
- [文字列の置換](#文字列の置換)
- [文字列の削除](#文字列の削除)
- [文字列の検索](#文字列の検索)
- [文字列比較)](#文字列比較)
- [幅寄せ](#幅寄せ)
- [大文字と小文字の置き換え](#大文字と小文字の置き換え)
- [文字列が特定な文字だけであるか](#文字列が特定な文字だけであるか)
- [文字列の先頭または末尾が特定な文字であるか](#文字列の先頭または末尾が特定な文字であるか)
まず,文字列は「"(ダブルクォーテーション)」もしくは「'(シングルクォーテーション)」で囲んで表現しています.
例えば「Hello World」を表示したい場合(今回はメッセージを変数msgに入れます)は`msg = "Hello World"`と書き換えて表示します.また,メッセージを表示するために`print`を使います.それから文字列の中では特殊文字を使うことができて,いくつかあるのですが「\n」で改行,「\t」がタブになります.
## 文字列に値を埋め込み
埋め込みを大きく分けて2つの方法があります.
まず1つ目の方法ですが,次のmoji_01.pyを見てください.
まず埋め込みたい値を文字列の中で「%」付きで表現していきます.
そのとき,値が入れたい場合は「%s」,浮動小数点数の場合は「%f」,整数の場合は「%d」を使います.
その後に「%」と書いてあげて,埋め込みたい値をこのように書いてあげればOKです.
2つ目の方法は,「%」の部分を {0},{1} としてあげて,その後に .format(name, score) と書いてあげます.こちらの 0 番目の要素が {0} に, 1 番目の要素が {1} に埋め込まれます.
使用方法は次のプログラムを見てください.
``` moji_01.py
name = "guest"
score = 52.8
# 1つ目の方法
print("name: %s, score: %f" % (name, score))
## => name: guest, score: 52.800000
# 2つ目の方法
print("name: {0}, score: {1}".format(name, score))
# => name: guest, score: 52.8
# 中身省略してもOK,そのときformatの中の順番で代入される
print("name:{},score:{}".format(name, score))
## => name: guest, score: 52.8
```
## 文字列の結合
2つの文字列の結合して,1つの文字列にするとき,「+」を使います.
joinメソッドとリスト/タプルを使って連結するテクニックもあります.
また,同じ内容を繰り返す場合は*演算子で整数を与えると指定した回数だけリピートした文字列が生成されます.
使用方法は次のプログラムを見てください.
``` moji_02.py
word_1 = "Gu"
word_2 = "est"
# 「+」使用
print(word_1 + word_2) ## => Guest
# 「join」使用
words = ["Hello", "World", "!"]
print(" ".join(words)) ## => Hello World !
# 「*」使用
word_3 = "Hello "
print(word_3 * 3) ## => Hello Hello Hello
```
## 文字列の分割
指定の文字列に対して,区切り文字で分割したリストを返します.
分割数はオプションで,分割する回数を制限できます.分割数は省略することができます.
splitは左から分割を行うことができます.また,rsplitは右から分割することができます.
使用方法は次のプログラムを見てください.
``` moji_03.py
phrase = "If you can dream it you can do it"
# 「split」使用 .split(区切り文字, 分割数)
print(phrase.split()) ## => ["If","you","can","dream","it","you","can","do","it"]
word = "HelloWorld"
# 「rsplit」使用 .rsplit(区切り文字, 分割数)
print(word.rsplit("l",1)) ## => ['HelloWor', 'd']
```
## 文字列の切り出し
`文字列オブジェクト[開始インデックス:終了インデックス]`開始インデックスと終了インデックスをコロン(:)でつなげて指定します.
使用方法は次のプログラムを見てください.
``` moji_04.py
word = "ABCDE"
print(word[1:3]) ## => BC
print(word[2:]) ## => CDE
-print(word[:3]) ## => ABCD
+print(word[:3]) ## => ABC
print(word[:]) ## => ABCDE
```
また,開始インデックスや終了インデックスをマイナス「-」つけることができます.ぜひ試してみて下さい.
## 文字列の置換
`.replace(置換される文字列, 置換する文字列, 置換回数)`を使用すると,指定の文字列を置換することができます.
置換回数はオプションで,置換する回数を指定できます.置換回数を指定しない場合は,全て置換されます.
使用方法は次のプログラムを見てください.
``` moji_05.py
word = "ABCABCABC"
# 指定文字列を置換する
print(word.replace("ABC", "X")) ## => XXX
# 置換回数を1回にして指定文字列を置換する
print(word.replace("ABC", "X", 1)) ## => XABCABC
```
## 文字列の削除
`.strip(削除する文字列)`を使用すると,文字列から特定の文字を削除できます.
stripは両端.他に,lstripは左端,rstripは右端の文字列を削除します.
使用方法は次のプログラムを見てください.
``` moji_06.py
word = "ABCABCA"
# stripで両端の削除
print(word.strip("A")) ## => BCABC
# lstripで左端の削除
print(word.lstrip("A")) ## => BCABCA
# rstripで右端の削除
print(word.rstrip("A")) ## => ABCABC
```
## 文字列の検索
`検索する文字列 in 検索対象の文字列`を使用すると,指定の文字列が含まれているかを調べることができます.
検索対象の文字列の中に,検索する文字列が存在すれば,True.存在しないならば,False.
使用方法は次のプログラムを見てください.
``` moji_07.py
word = "ABCABCA"
# 存在する場合
print("ABC" in word) ## => True
# 存在しない場合
print("E" in word) ## => False
```
上の方法以外は,`.find(検索する文字列, 開始位置, 終了位置)`を使う方法もあります.こちらの方がよく使われます.
findは文字列の左端から検索するのに対し,rfindは文字列の右端から検索します.
こちらの方は,開始位置と終了位置を指定することによって,検索範囲を指定することができます.
使用方法は次のプログラムを見てください.
``` moji_07.py
word = "ABCABCA"
# find
print(word.find("A")) ## => 0
print(word.find("B",2, 6)) ## => 4
# rfind
print(word.rfind("A")) ## => 6
print(word.find("B",2, 6)) ## => 6
# 検索した文字列が見つからない場合
print(word.find("D")) ## => -1
```
## 文字列比較(==演算子とis演算子)
文字列同士の比較に"=="という比較演算子を使用し,左右の文字列が一致する場合はTrue,異なる場合はFalseを返します.
文字列同士が異なる場合にTrueを返したい場合は,"!="という比較演算子を使います.
文字列の比較演算子として"=="の他にis演算子があります.
**※ 文字列が同じ値かどうかを調べる場合は"=="を使い,is演算子は使用しないようにしましょう.**
is演算子の利用が推奨される場面はNoneと比較する場合です.
メリットとして"=="と比べてis演算子の方が比較処理の速度が早いです.
```moji_08.py
word = "abcd"
# 一致する場合
print(word == "abcd") ## => True
# 異なる場合
print(word == "abce") ## => False
```
## 幅寄せ
``` moji_09.py
word = "ABCabc"
# 左寄せ 「.ljust」
print(word.ljust(10)) ## => "ABCabc "
# 右寄せ 「.rjust」
print(word.rjust(10)) ## => " ABCabc"
# 中央寄せ 「.center」
print(word.center(10)) ## => " ABCabc "
# 0で埋めて左寄せ 「.zfill」
print(word.zfill(10)) ## => "0000ABCabc"
```
## 大文字と小文字の置き換え
``` moji_10.py
word = "ABCabc"
# 全て大文字にする 「.upper」
print(word.upper()) ## => ABCABC
# 全て小文字にする 「.lower」
print(word.lower()) ## => abcabc
# 大文字と小文字を入れ替える 「.swapcase」
print(word.swapcase()) ## => abcABC
# 先頭を大文字、その他を小文字にする 「.capitalize」
print(word.capitalize()) ## => Abcabc
```
## 文字列が特定な文字だけであるか
``` moji_11.py
word = "ABCabc"
# 英数字だけか 「.isalnum」
print(word.isalnum()) ## => True
# 英字だけか 「.isalpha」
print(word.isalpha()) ## => True
# 数字だけか 「.isdigit」
print("123".isspace()) ## => True
print(word.isdigit()) ## => False
# 空白文字だけか 「.isspace」
print(" \n\t\r".isspace()) ## => True
print(word.isspace()) ## => False
```
## 文字列の先頭または末尾が特定な文字であるか
``` moji_12.py
word = "ABCabc"
# Aで始まるかを調べる
print(word.startswith("A")) ## => True
# Aで終わるかを調べる
print(word.endswith("A")) ## => False
```
## 参考サイト
ひきメモ: [http://d.hatena.ne.jp/yumimue/20071223/1198407682](http://d.hatena.ne.jp/yumimue/20071223/1198407682)