Python 3には多くの組み込み型が用意されているが、その中でも基本的なものを以下に示す。
型 | 説明 |
---|---|
ブール型(bool型) | True(真)かFalse(偽)。ただし、Pythonでは「None、ゼロ(0、0.0など)、空の文字列/リスト/タプル/辞書」などはブール演算の中では偽として、他のものは真として扱われる |
数値型 | 整数(int型)、浮動小数点数(float型)、複素数(complex型)がある。int型は任意のサイズの整数値を扱える(ビット幅による制約はない) |
シーケンス型 | リスト(list型)、タプル(tuple型)、rangeオブジェクト。なお、Python 3の組み込み型として配列はサポートされておらず、配列的なデータはリストなどを使用して表現する。ただし、より効率のよい配列がarrayモジュールとして、あるいは数値演算パッケージ「NumPy」に含まれる形で提供されている |
テキストシーケンス型 | いわゆる文字列(str型)。Python 3では文字列はUnicode文字で構成される |
集合型 | 要素が可変の集合(set型)と要素が不変の集合(frozenset型)がある。集合には順序性がなく、同一要素の重複も許されない。何らかの値の存在確認や、リストなどの要素の重複を許すデータから重複要素の除去、集合演算などを行うのに使用できる |
辞書型 | キーと値からなるデータを扱うための型(dict型) |
Python 3のデータ型(一部) |
上に示した以外にも関数やクラス、メソッドなども組み込み型として扱われる。また、バイナリデータを扱うためのbytes型やbytearray型もある。
変数は代入(あるいは束縛)を行うことで、定義され、使用できるようになる。
以下に例を幾つか示す。リストや文字列などの操作については後述する。なお、以下では「切り捨て除算」を含めて演算の例を幾つか示すが、本稿では演算子やその優先順位についての説明は割愛する(本フォーラムの読者の多くはそうした要素にはおなじみであろう)*1。
# 変数の定義とif文
a = 0.0 # float型
if a: # ブール式中では0.0は偽となる。出力結果: false
print("true")
else:
print("false")
# リストの加算
a = list(range(5)) # rangeオブジェクトからlistオブジェクトを生成
b = list(range(5,10))
print(a + b) # 出力結果:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 文字列の反復
s = "string"
for c in s: # 文字列は反復可能なオブジェクト
# print関数のend引数は最後に関数の最後に出力される(デフォルトは改行)
print(c, end=' ') # 出力結果: s t r i n g
print()
# 集合の作成
s = "strings" # "s"が重複している
st = set(s) # 集合では要素の重複は許されない
print(st) # 出力結果: {'r', 't', 'n', 'g', 's', 'i'}
# 整数の除算と切り捨て除算
print(10 / 3) # 除算。出力結果: 3.3333333333333335
print(10 // 3) # 切り捨て除算。出力結果: 3
# ビット演算
print(10 & 3) # ビットAND(1010 & 0011)。出力結果: 2
print(10 | 3) # ビットOR(1010 | 0011)。出力結果: 11
*1 例中の「# 文字列の反復」内では組み込み関数printにend引数を渡している。この関数は出力の最後にend引数で指定した文字列を出力する(デフォルトは改行)。ここでは、end引数にスペースを指定しているので、各文字がスペースで区切られて1行に表示されている。
Python 3では文字列はUnicode文字のシーケンスとして扱われる。文字列はシングルクオート/ダブルクオートで囲む。そのそれぞれでトリプルクオート形式の文字列表現もある。これは改行や空白文字を入力された通りに文字列にする。シングルクオート内にはダブルクオートをエスケープなしで記述できるし、その逆も同様だ。また、組み込み関数strを使うと他の型の値を文字列化したものが得られる。以下に例を示す。
s1 = 'insider\'s view' # シングルクオートで囲んだ文字列
s1 = 'insider\'s view. "hello"' # シングルクオートをエスケープ
s2 = "insider's view. \"hello\"" # ダブルクオートで囲んだ文字列
print(s1) # 出力結果: insider's view. "hello"
print(s2) # 出力結果: insider's view. "hello"
# トリプルクオートは入力内容がそのまま文字列となる
s3 = '''Insider's view
"hello"'''
s4 = """insider's view
"hello\""""
print(s3)
print(s4)
# 出力結果はどちらも同じ
# Insider's view
# "hello
# 数値の文字列化
s = str(1)
print(s) # 出力結果: 1
print(type(s)) # 出力結果: <class 'str'>
# リストの文字列化
s = str([1, 2, 3])
print(s) # 出力結果: [1, 2, 3]
print(s[0:3]) # 先頭の3文字を出力。出力結果: [1, ]
以下に文字列(str型)を操作するためのメソッド/関数を示す(抜粋)。
文字列操作メソッド | 説明 |
---|---|
s.capitalize() | 文字列の先頭を大文字化、残りを小文字化 |
s.center(width[, fillchar]) | 文字列をセンタリング |
s.count(sub[, start[, end]]) | start〜end内でのsubの発生回数を取得 |
s.endswith(suffix[, start[, end]]) | start〜endで指定された範囲がsuffixで終了するか |
s.startswith(prefix[, start[, end]]) | 同様に範囲内でprefixで始まるか |
s.expandtabs(tabsize=8) | 文字列内のタブ文字を空白文字に展開(tabsize引数の省略時は8タブと見なされる) |
s.find(sub[, start[, end]]) | start〜end内でsubを検索し、見つかればそのインデックス位置を、見つからなければ-1を返す |
s.index(sub[, start[, end]]) | start〜end内でsubを検索(見つからないと例外が発生) |
s.format(*args, **kwargs) | 文字列の書式化 |
s.isalnum() | 文字列が英数字で構成されているか |
s.isalpha() | 文字列が英字で構成されているか |
s.isdecimal() | 文字列が10進数字で構成されているか |
s.isdigit() | 文字列が10進数字で構成されているか |
s.isnumeric() | 文字列が数を表す文字で構成されているか |
s.islower() | 全て小文字か |
s.isupper() | 全て大文字か |
s.isprintable() | 印字可能文字か |
s.isspace() | 空白文字か |
s.istitle() | 文字列がタイトルケースか |
s.title() | 文字列をタイトルケース化 |
s.join(iterable) | iterableの要素を変数sの内容で区切って連結 |
s.lower() | 小文字化 |
s.upper() | 大文字化 |
s.replace(old, new[, count) | 文字列中のoldをnewでcount回(省略時は全て)置き換えた文字列を返送 |
s.rstrip(char) | 文字列末からcharで指定した文字を削除(省略時は空白文字を削除) |
s.lstrip(char) | 文字列先頭からcharで指定した文字を削除(省略時は空白文字を削除) |
s.split(sep, maxsplit=-1) | sepを区切り文字としてmaxsplit回文字列を分割したリストを返送する(maxsplit引数を省略した場合は分割が全て行われる) |
s.rsplit(sep, maxsplit=1) | sepを区切り文字として文字列末尾から分割をしていく(maxsplit引数を省略した場合は分割が全て行われる) |
以下に例を示す(上の表とは紹介順が異なっているので注意。以下では操作の種別ごとに並べてある)。本サイトの制限上、サンプル中で表示できない文字(chr(0x2460)=「丸付き数字の1」、chr(0x2150)=「VULGAR FRACTION ONE SEVENTH」=「常分数の1/7」を1文字で表現したもの)については組み込み関数chrの呼び出し結果に対してisdecimal/isdigit/isnumericの各メソッドを呼び出している(これらのメソッドの違いについてはPythonのドキュメントを参照されたい)。
# タブ展開
print('a\tb'.expandtabs()) # 出力結果: 'a b'
# 文字列検索
print('insider.net'.find('sider')) # 出力結果: 2
print('insider.net'.index('.net')) # 出力結果: 7
print('insider.net'.endswith('net')) # 出力結果: True
print('insider.net'.startswith('ins')) # 出力結果: True
# 文字列の書式化
print('{0} + {1} = {2}'.format(1, 2, 1 + 2)) # 出力結果: '1 + 2 = 3'
# 文字列が〇〇か
print('foo'.isalnum()) # 出力結果: True
print('a1'.isalpha()) # 出力結果: False
print('abc'.isalpha()) # 出力結果: True
print('123'.isdecimal()) # 出力結果: True
print('123'.isdigit()) # 出力結果: True
print('123'.isnumeric()) # 出力結果: True
print('ABC'.islower()) # 出力結果: False
print('abc'.islower()) # 出力結果: True
print('ABC'.isupper()) # 出力結果: True
print('Abc'.isupper()) # 出力結果: False
print('a'.isprintable()) # 出力結果: True
print('\t'.isprintable()) # 出力結果: False
print('\n'.isspace()) # 出力結果: True
print(' '.isspace()) # 出力結果: True
print('insider net'.istitle()) # 出力結果: False
# 丸付き数字の1は数字か
print(chr(0x2460).isdecimal()) # isdecimalではFalse。出力結果: False
print(chr(0x2460).isdigit()) # isdigitではTrue。出力結果: True
print(chr(0x2460).isnumeric()) # isnumericでもTrue。出力結果: True
# 「1/7」は数字か
print(chr(0x2150).isdecimal()) # isdecimalではFalse。出力結果: False
print(chr(0x2150).isdigit()) # isdigitでもFalse。出力結果: False
print(chr(0x2150).isnumeric()) # isnumericではTrue。出力結果: True
# 文字列を改変(した新しい文字列を取得)
print('BAR'.capitalize()) # 出力結果: Bar
print('foo'.center(7, '*')) # 出力結果: **foo**
print('foo'.count('o')) # 出力結果: 2
print('insider net'.title()) # 出力結果: 'Insider Net'
print('.'.join(['insider', 'net'])) # 出力結果: 'insider.net'
print(', '.join([str(x) for x in range(3)])) # 出力結果: '0, 1, 2'
print('AbC'.lower()) # 出力結果: 'abc'
print('AbC'.upper()) # 出力結果: 'ABC'
print('insider.net'.replace('insider', 'outsider')) # 出力結果: 'outsider.net'
print('foofoofoo'.replace('foo', 'bar', 2)) # 出力結果: 'barbarfoo'
print('foo '.rstrip()) # 出力結果: 'foo'
print('foo'.rstrip('o')) # 出力結果: 'f'
print(' foo'.lstrip()) # 出力結果: 'foo'
print('1 2 3 4 5'.split()) # 出力結果: ['1', '2', '3', '4', '5']
print('1 2 3 4 5'.split(' ', 2)) # 出力結果: ['1', '2', '3 4 5']
print('1 2 3 4 5'.rsplit(' ', 2)) # 出力結果: ['1 2 3', '4', '5']
次ページではリストとタプル、それからリストとタプルと文字列に共通な操作についてまとめる。
Copyright© Digital Advantage Corp. All Rights Reserved.