Pythonの組み込み関数(built-in)の使い方と小技集まとめ
Pythonには数多くの組み込み関数があります。組み込み関数とは、インポートや定義なしでどこでも使用できる関数のことです。これらを使いこなすことで,効率的な開発が可能になります。この記事では、割とよく使うものをまとめてみました。
リスト,タプル操作
リストの最大値を求める(max)
max([3,4,1]) # 4
リストの最小値を求める(min)
min([3,4,-1]) # -1
別の値にマッピングする(map)
シーケンスに対して、別の値に写像する関数を与えることで、マッピングされたシーケンスが得られます。ここでは、lambda式を利用して、文字列を整数値(長さ)にマッピングしています。
map(lambda a:len(a), ['a', 'ab', 'abc']) # [1, 2, 3]
以下のようにすると、文字列を整数値に変換できます。
map(int, ['1', '2', '3']) # [1, 2, 3]
リストをソートする(sorted)
sorted([3, 4, -1]) # [-1, 3, 4]
ソート時のキーを指定する(sorted)
lambda式を指定することで、ソートする際のキーを設定できます。
fruits = ['apple', 'watermeron', 'kiwi'] sorted(fruits, lambda a, b:len(a) - len(b)) #文字の長さでソート # ['kiwi', 'apple', 'watermeron']
リストを逆順にする(reversed)
list(reversed([1, 2, 3])) # reversedの返り値はlistではない # [3, 2, 1]
リストの総和を得る(sum)
sum([3, 4, -1]) # 6
昇順のリストを得る(range)
0から始まるため、引数の値は含まれません。
range(5) # [0, 1, 2, 3, 4]
一定間隔のリストを得る(range)
引数の順番はrange(初め, 終わり, 間隔)です。
range(1, 10, 2) # [1, 3, 5, 7, 9]
降順のリストを得る(range)
range(4, -1, -1) # [4, 3, 2, 1, 0]
list(reversed(range(5))) # [4, 3, 2, 1, 0]
リストをフィルターする(filter)
条件を満たす値のみを抽出できます。
filter(lambda x: x!=0, [0, 1, 0, 3, 4, 0]) # [1, 3, 4]
リストを集約する(reduce)
ある規則にしたがってすべての要素を1つの値に集約します。
reduce(lambda a, b: a*b, [1, 2, 3, 4]) # 24
ループ関連
ループする際にインデックスをつける(enumerate)
for i, elem in enumerate(['a', 'b', 'c']): print i, elem # 0 a # 1 b # 2 c
複数のシーケンスをまとめてループ(zip)
要素数が違う場合、少ない方に合わせます。
alphabet = ['a', 'b', 'c'] number = [0, 1, 2, 3] for n, a in zip(number, alphabet): print n, a # 0 a # 1 b # 2 c
クラス型関連
インスタンスの型を調べる(type)
type(1) == int # True
キーボードからの標準入力(raw_input)
入力は文字列として、与えられます。そのため、数字として使うには変換が必要です。
s = raw_input()
変換関連
浮動小数点数を整数に変換する(int)
int(12.6) # 12
数字の文字列を浮動小数に変換する(float)
float('12.6') # 12.6
数字を文字列に変換する(str)
str(24) # '24'
文字を文字コードに変換する(ord)
ord('a') # 97
文字コードを文字に変換する(chr)
chr(65) # 'A'
ファイル操作
ファイルを読み込み専用で開く(open)
fp = open('hoge.txt', 'r') lines = fp.readlines() fp.close()
ファイルを書き込み専用で開く(open)
fp = open('hoge.txt', 'w') fp.write('hello world!\n') fp.close()
ファイルをスマートに開く(open)
この場合、close()は必要ありません。
with open('hoge.txt', 'r') as fp: lines = fp.reandlines()
ファイルパス(Path)関連
親ディレクトリをimportパスに追加
import os, sys sys.path.append(os.pardir) import hoge
パスを作成する
import os os.path.join('/', 'home', 'hoge')
パスからファイル名を取得する
import os
os.path.basename(hoge)
カレントディレクトリを取得する
import os
os.getcwd()
おまけ
ラムダ式(lambda expression)
lambda式は一行で関数を定義できる便利な構文です。
lambda 引数: 返り値
と定義できます。
例えば、以下のように、ラムダ式で定義された関数(add_lambda)と通常の関数(add_normal)は同じように動作します。
add_lambda = lambda a, b: a + b def add_func(a, b): return a + b print add_func(1, 2) print add_lambda(1, 2) # 3 # 3
文字列が数字かどうか判定する(float)
float関数を数字以外の文字列に適用すると、エラーが発生することを利用します。
def isfloat(value): try: float(value) return True except: return False
ファイルの単語数をカウントする(sum, map, lambda, len, open)
様々な組み込み関数を組み合わせることで、たった一行で、ファイル中のスペースで区切られた単語数を計測できます。
sum(map(lambda s: len(s.split(" ")), open('hoge.txt').readlines()))
アルファベットのリストを得る
import string list(string.ascii_lowercase) # ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
一定時間スリープ
秒単位で処理を停止できます。
import time time.sleep(3)
リストを同じ要素で初期化する
[None] * 5 # [None, None, None, None, None]
アサーション(assert)
square = lambda a: a*a assert square(3) == 9