Python operator.itemgetterでイテラブルの要素を抽出する

operatorモジュールのitemgetter関数を使えば、イテラブル(リストやrangeオブジェクト等の順番に数えられるオブジェクト)から任意の要素を抜き出すことができます。

■サンプルスクリプト
itemgetter_demo.py

import sys
from operator import itemgetter

def get_pg(index):
    pg_list = ['Python', 'Ruby', 'R', 'JavaScipt', 'Go', 'PHP']
    pg_name = itemgetter(index)

    return pg_name(pg_list)


if __name__ == '__main__':
    index = int(sys.argv[1])
    print(get_pg(index))

■実行結果

$ python itemgetter_demo.py 3
JavaScipt

複数の要素を一度に抽出する

itemgetter関数に複数のindex値を渡せば、イテラブルから複数の要素をタプルとして抜き出すことができます。

■サンプルスクリプト
multi_get.py

from operator import itemgetter

pg_list = ['Python', 'Ruby', 'R', 'JavaScipt', 'Go', 'PHP']
pgs = itemgetter(1, 2, 5)
result = pgs(pg_list)

print(result)
print(type(result))

■実行結果

$ python multi_get.py 
('Ruby', 'R', 'PHP')
<class 'tuple'>

参考文献

Fluent Python (オライリー) P.168