特集
» 2016年10月28日 05時00分 公開

TensorFlowやChainerに興味があるけど、Python未経験の技術者が最低限知っておいた方がいい基礎文法まとめ特集:タイニーレファレンス(2/6 ページ)

[かわさきしんじ,Insider.NET編集部]

組み込み型

 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引数を省略した場合は分割が全て行われる)
文字列を操作するメソッド
表中のsは文字列を参照する変数とする。

 以下に例を示す(上の表とは紹介順が異なっているので注意。以下では操作の種別ごとに並べてある)。本サイトの制限上、サンプル中で表示できない文字(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.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。