Hatena::ブログ(Diary)

Python学習日記

2010-01-27

文字列操作、演算

08:26

Pythonには文字列操作、演算について様々な演算が用意されています。

以下によく使いそうなもののサンプルをピックアップして、コードにしてみました。

msg = 'Hello, Python'

# 文字列の長さを取得する
msg_length = len(msg) # 13と取得できる
print 'len : ' + str(msg_length)

# findメソッド
py_idx_of_msg = msg.find('Py') # 7と取得できる。Pyのある場所のインデクス
print 'msg.find : ' + str(py_idx_of_msg)

# 文字列インデクシング
c = msg[7]
print 'msg[7] : ' + c #'P'と出力

# 文字列のスライシング
msg2 = msg[7:9]
print 'msg[7:9] : ' + msg2 # 'Py'と出力

# 特定の文字列がある文字列中に入っているかの確認
if 'Py' in msg :
    print "'Py' in msg is true"

# 文字列から1文字ずつ取得する
for c in msg:
    print 'c : ' + c

# 文字列置換
msg3 = msg.replace('Hello', 'Hola')
print msg3 # Hola, Pythonと出力

# 文字列分割してリストに。
splitted_word = msg.split(',')
print splitted_word # ['Hello', ' Python'] と出力

# 文字列を再連結
joined_word = ','.join(splitted_word)
print joined_word # Hello, Pythonと出力

一応、これくらいあれば、基本的な文字列操作はできると思いますが、今後は必要に応じて追加していきます。

タプルとリストの違い

07:13

私もすべてを理解しているわけではないのですが、共通点は「両方ともオブジェクトの集合である。」という点です。

違いはリストはオブジェクトの内容を変更できるのに対して、タプルは上書きできないということです。

タプルはリストと同じようにキーではなくオフセット(1とか2とか)によってアクセスできますが、以下のように tuple[1] = 'aaa' というようにオブジェクトの内容を上書きすることができません。違いを以下のコードの例にしてみました。

list = ['python', 'perl', 'ruby']
print 'list[0] = ', list[0]    # pythonと出力

tuple = ('python', 'perl', 'ruby')
print 'tupel[0] = ', tuple[0]  # pythonと出力

list[1] = 'php'
print 'list[1] = ', list[1]    # phpと出力

tuple[1] = 'php' # ここでエラー

# 以下のようにエラーが出ます。
# tuple[1] = 'php'
# TypeError: 'tuple' object does not support item assignment

タプルは不変性を持つことに特徴があるので、オブジェクトのリストを使いたいのだけど、プログラム中で変更されることを望まない場合に使う、などの利用例がありそうです。

ビルトインオブジェクトの種類

07:02

Pythonには最初から便利な機能を持ったビルトインオブジェクトがあります。

最初のうちはビルトインオブジェクトだけでいろいろ試してみてPythonに慣れるのがよさそうです。

ビルトインオブジェクトの型とリテラルの例、それと備考を以下にまとめました。

ビルトインオブジェクトの型リテラル備考
数値1, 2, 0.1, 99L
文字列'abc', "abc"シングルクォーテーションかダブルクォーテーションで囲む
リスト[1, 2, 3], ['python', 'perl', 'ruby'], ['abc', ['def', 'ghi' リスト内にリストもできる
ディクショナリ{'key1':'value1', 'key2', 'value2'}キーで指定して値の設定、取得ができる
タプル('hoge', 'kero', '...')リストと違い不変性のあるオブジェクトの集合
ファイルf = open('./hoge.txt', 'r')ファイルを処理するためのインタフェース