Pythonのビルトインオブジェクトについて、勉強中に気になったとこだけサンプル交えてメモしたものです。
ここで扱うのは、下記オブジェクトです。
- 数値
- 文字列
- リスト
- ディクショナリ
- タプル
シーケンスやループでの活用など込み入ったTipsは別途まとめる予定です。
この記事の目次
数値
数値オブジェクト作成系
数値系のリテラル
まずは、数値のオブジェクトを作るリテラルです。
どの数値オブジェクトを作っているかはコメントを参照してください。
#整数の10進数 419
>>> 419
419
#整数の8進数 17
>>> 0o21
17
#整数の16進数 17
>>> 0x11
17
#浮動小数
>>> 1.23
1.23
#複素数
>>> 3+4j
(3+4j)
数値の文字列のパース
整数はint、浮動小数はfloat、複素数はcomplexのモジュールを使って、文字列から数値オブジェクトを生成できます。
8進数も16進数も整数なのでintでできます。
>>> int('419')
419
>>> int('0o21', 8)
17
>>> int('0x11', 16)
17
>>> float('1.23')
1.23
>>> complex('3+4j')
(3+4j)
その他の数値オブジェクト
固定小数 Decimal
浮動小数(float)では、計算機が2進数なので丸め誤差が発生します。例えば、
>>> 0.1 + 0.2
0.30000000000000004
普通は0.3ですね。ですが2進数では10進計算の精度に限界があります。
「お金」に関するシステムでは、この厳密で固定小数で計算しているという噂を聞いたことあります。
そのときに使えるのがDecimalです。
>>> import decimal
>>> decimal.Decimal('0.1') + decimal.Decimal('0.2')
Decimal('0.3')
#floatにしたいのであれば
>>> float(decimal.Decimal('0.1') + decimal.Decimal('0.2'))
0.3
厳密に計算が必要なことは少なく、通常の浮動小数で問題ないです。
集合 set
集合を作って結合や交差、差の演算ができます。
>>> x = set([1,2,3])
>>> y = set([1,3,5])
#集合
>>> x | y
{1, 2, 3, 5}
#交差
>>> x & y
{1, 3}
#差
>>> y - x
{5}
#リストにする
>>> [z for z in x | y]
[1, 2, 3, 5]
#リストにする(コンストラクタを使う)
>>> list(x | y)
[1, 2, 3, 5]
ブール bool
TrueとFalseです。整数の1,0と同じです。
# 数値の0がFalse
>>> bool(0),bool(1)
(False, True)
# 文字列の空''がFalse、文字列の'False'は空じゃないのでTrue
>>> bool(''),bool('False')
(False, True)
# リストは空がFalse、要素があればTrue
>>> bool([]), bool([0])
(False, True)
# タプルはなぜか要素が0で1つならFalse
>>> bool(()), bool((0)), bool((0,0))
(False, False, True)
# ディクショナリは空がFalse、keyvalueがあればTrue
>>> bool({}), bool({'key':'value'})
(False, True)
文字列
- 文字列はシーケンスの一種
- 不変性オブジェクト
文字列のリテラル
まずは、文字列のオブジェクトを作るリテラルです。
# 通常はシングルクォートで括る。ダブルクォートがエスケープなしで使える。
>>> 'yes we "can"'
'yes we "can"'
# 上記の逆
>>> "I'm a spam"
"I'm a spam"
# トリプルクォーテーション。改行も含められる。
>>> '''
... A,B,C
... 1,2,3
... '''
'\nA,B,C\n1,2,3\n'
# エスケープシーケンスを無効にしたい。
>>> r"C:\temp"
'C:\\temp'
エスケープシーケンス
エスケープシーケンス | 意味 |
---|---|
\改行 | 行の継続 |
\ | バックスラッシュ |
\’ | シングルクォーテーション |
\” | ダブルクォーテーション |
\a | ビープ音を鳴らす |
\b | バックスペース |
\f | 改ページ |
\n | 改行 |
\r | キャリッジリターン |
\t | タブ |
\v | 垂直タブ |
\N{id} | Unicodeのid指定 |
\uhhh | 16ビットUnicodeの16進指定 |
\Uhhh | 32ビットUnicodeの16進数指定 |
\xhh | ASCII文字の16進指定 |
\ooo | ASCII文字の8進指定 |
\0 | Null |
文字列フォーマット
Cのsprintfと同じ役割です。
- 記法は「$[(キー)][フラグ][桁数][.精度]コード」です。
- キーは値のディクショナリ指定で使う
- フラグは「-」なら左寄せ。省略は「+]で右寄せ。
- コードで指定できるフォーマットは後述
# シンプルな例
>>> '%d years old' % 39
'39 years old'
# タブルで、ゼロ埋めと桁指定
>>> '%04d/%02d/%02d' % (1978, 4, 19)
'1978/04/19'
# ディクショナリ指定
>>> '%(year)04d/%(month)02d/%(day)02d' % {'day':19, 'month':4, 'year':1978}
'1978/04/19'
# 小数
>>> '|%-3.2f|' % 1.2345
'|1.23|'
文字列フォーマットで使用できるコード
コード | 型 |
---|---|
%s | 文字列。型変換あり。 |
%r | 文字列。%sはstrの結果で、%rはreprの結果。 |
%c | 文字 |
%d | 10進数 |
%i | 整数 |
%u | 符号なし整数 |
%o | 8進数 |
%x | 16進数 |
%X | 16進数。英字が大文字になる。 |
%e | 指数表記の浮動小数 |
%E | 指数表記の浮動小数。Eが大文字。 |
%f | 10進数の浮動小数 |
%g | 浮動少数。eとf |
%G | 浮動少数。EとF |
%% | %をそのまま出力 |
リスト
- リストはシーケンスの一種
- オブジェクトの参照を並べたもの
- 可変性オブジェクト
リストの作成
>>> [1,3,5]
[1, 3, 5]
# 行列
>>> [[1,2,3],
... [4,5,6],
... [7,8,9]]
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
# 型違いも
>>> ['year', 1978]
['year', 1978]
ディクショナリ
- オブジェクトを順不同に並べたもの、シーケンシャルではなく写像
- JavaのHashMap(key, value)のようなもの
- 可変性オブジェクト
ディクショナリの作成
>>> { 'month': 4, 'day': 19 }
{'day': 19, 'month': 4}
# ネスト
>>> { 'arr': [1,2,3], 'map': {'key1':'val1', 'key2':'val2'} }
{'map': {'key2': 'val2', 'key1': 'val1'}, 'arr': [1, 2, 3]}
タプル
タプルは、不変性のリストです。
不変性があるので、関数呼び出しなどで渡す値で、意図しない変更が起きないようにする為などと言われていますが、自ら使う必要はないでしょう。
Pythonネイティブでタプルを返すもの、例えば、ディクショナリ.items()などでタプルを返すので、そういったケースで間接的に使うことになるかと思います。
タプルの作成
>>> (1,2,3)
(1, 2, 3)