プログラミング言語「Python」のメモです。v.2.5 のメモのなので最新だと違うかも。。

シーケンス

シーケンスとは、オブジェクトを一定の順序に並べたものです。シーケンスでは要素となるオブジェクトの順序は常に変わりません。シーケンスには、文字列リストタプル などがあります。

シーケンスに対して行える操作があります。要素の位置を指定して取り出す インデクシング、要素を範囲で取得する スライシング があります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
str = 'Spam'
str[0]   # S
str[-1]  # m
str[1:3] # pa
str[1:]  # pam
str[:3]  # Spa
str[:-1] # Spa
str[:]   # Spam

str = 'abcdefghij'
str[1:9:2]  # bdfh
str[5:1:-1] # fedc
str[::-1]   # jihgfedcba

len('abc')      # 3
len([1,2,3,4])  # 4

リスト内包表記

リスト内包表記はシーケンスに属する要素のそれぞれに同じ演算を行うことができる表記法です。リスト内包表記は最終的にリストを作成します。

1
2
3
4
5
6
matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]
col2 = [row[1] for row in matrix]
col2
# [2, 5, 8]

タプル

タプル はリストと似ていますが、要素を変更することができません。タプルはカッコで作成します。要素が一つの場合は、要素の後にカンマをつけなければいけません。 タプルは オブジェクトの集合、リストは データ構造 と使い分けをするらしいです。

1
2
3
4
tuple = (1, 2, 3, 4)
tuple[1] = 5
# TypeError: 'tuple' object does not support item assignment
tuple = (1,)

ヘルプを調べる

組み込み関数の dir を使うと、オブジェクトの全属性のリストが手に入ります。また、help 関数を使うとメソッドのヘルプ情報を出力可能です。

1
2
3
4
5
6
7
8
9
dir('string')
# ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
help('string'.index)
# Help on built-in function index:
#
# index(...)
#     S.index(sub [,start [,end]]) -> int
#
#     Like S.find() but raise ValueError when the substring is not found.

文字列

Python ではシングルクォートとダブルクォートは同じ意味を持ちます。なので、他の言語のように、ダブルクォートの場合だけエスケープシーケンスが効くということはありません。

1
2
3
print 'a\nb\tc'
# a
# b   c

リスト操作

Python のリストは [] を使って作ります。他の言語の配列操作と同じ処理は基本的にできます。Python 特有の操作だなと思ったものだけメモ。

1
2
3
4
5
6
7
8
a = [1, 2, 3, 4, 5]

# 特定の要素が含まれているかどうかの確認
3 in a  # => True
6 in a  # => False

# リスト内包表記
[x**2 for x in a] # => [1, 4, 9, 16, 25]

ステートメント、構文に関する注意点

コロンを忘れない

複合ステートメント(if、while、for などの最初の行)の末尾にはかならず : をつけます。

トップレベルのコードはインデントしない

トップレベルコードはかならず左端から書き始めます。

whilerange よりも、単純な for を使う

シーケンスを扱う場合は、できるだけ単純な forfor x in seq:)を使うようにします。

オブジェクトの上書きを行う関数は値を返さない

list.appendlist.sort などのオブジェクトを上書きするような関数は値を戻しません。None を返すようにします。

変数のスコープ

Python の変数のスコープは、「ローカルスコープ」「グローバルスコープ」「ビルトインスコープ」があります。 関数内で定義された変数は「ローカルスコープ」に所属します。

関数の引数で渡された変数は参照渡しになります。変数の代入では元のオブジェクトは変更されませんが、オブジェクトの上書きは影響を及ぼします。