俺とプログラミング

某IT企業でエンジニアをしてます。このブログではプログラミングに関わることを幅広く発信します。

Pythonの組み込み関数(built-in)の使い方と小技集まとめ

Pythonには数多くの組み込み関数があります。組み込み関数とは、インポートや定義なしでどこでも使用できる関数のことです。これらを使いこなすことで,効率的な開発が可能になります。この記事では、割とよく使うものをまとめてみました。

リスト,タプル操作

素数を取得する(len)

リストだけでなく辞書(dict), タプル(tuple), 文字列(str), 集合(set)などにも使えます。

len([2, 1, 3])
# 3

リストの最大値を求める(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

特定のクラスのインスタンスかどうか判定する(isinstance)

この関数はクラスが継承元の場合にもTrueを返します。

isinstance([1,2,3], list)
# 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.path.abspath(hoge)

カレントディレクトリを取得する

import os
os.getcwd()

カレントディレクトリのファイル一覧を相対パスで取得する

import os
os.listdir(os.getcwd())

カレントディレクトリのファイル一覧を絶対パスで取得する

import os, glob
path = os.path.join(os.getcwd(), '*')
glob.glob(path)

おまけ

ラムダ式(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
Copyright © 2016 ttlg All Rights Reserved.