Python TIPS

表記方法

内包表記

リスト内包表記

[式 for 変数名 in イテラブルなオブジェクト]

式の結果を新規のリストに格納する。

list_1 = [1, 5, 73, 98]
list_2 = [i*2 for i in list_1]

print(list_2) #-> [2, 10, 146, 196]
  • 10個のランダムな整数が入ったリストをつくる
import random
nums = [random.randint(0, 30) for _ in range(10)]
print(nums)

アンパック時に *_ で不要な要素を除外する

*_ で残りの要素を一つのリストにまとめられる。
_ である必要はないが、使用しない要素は _ で区別されることが多い。

l = [0, 1, 2, 3, 4, 5, 6]
a, b, c, *_ = l
print(a, b, c)   #-> 0 1 2
print(_)         #-> [3, 4, 5, 6]

# _ でなくても問題ない
t = (0, 1, 2, 3, 4, 5, 6)
a, b, *u = t
print(a, b)      #-> 0 1
print(u)         #-> [2, 3, 4, 5, 6]

可変長引数

引数の個数を制限しない書き方。
イテラブルオブジェクトはアンパックして渡す。

*args はタプルで受け取る。

def func(word, *args):

    print(word)
    print(args)

    for arg in args:
        print(arg)

    print()



func("普通に渡す", 0, 1, 2)
#-> 普通に渡す
#-> (0, 1, 2)
#-> 0
#-> 1
#-> 2

func("アンパックしたリスト", *[4, 5, 6])
#-> アンパックしたリスト
#-> (4, 5, 6)
#-> 4
#-> 5
#-> 6

func("アンパックしたタプル", *(7, 8, 9))
#-> アンパックしたタプル
#-> (7, 8, 9)
#-> 7
#-> 8
#-> 9

func("リスト", [10, 11, 12])
#-> ([10, 11, 12],)
#-> リスト
#-> [10, 11, 12]

集合

定義a = {1, 3, 3, 4, 6, 6, 7}
b = {1, 2, 5, 8, 9, 9}
print(a) #-> {1, 3, 4, 6, 7}
print
(b) #-> {1, 2, 5, 8, 9}
set で定義a = [1, 3, 3, 4, 6, 6, 7]
a = set(a)
リストへ変換list(a)
積集合 | どちらにもあるものa & b
和集合 | 合併a | b
差集合a - b
どちらか一方にしか入っていないものa ^ b
部分集合か判定a <= b
上位集合か判定a >= b
要素を追加a.add(10)
要素を削除a.discard(5)
discard で消す場合は値がなくてもエラーがでない

Docstrings

関数を宣言した直後にコメントアウトすることで関数の解説を記述できる。

def func(x, y):
    '''
    Docstrings : 関数の解説をここに記述していく
    :param x(string): 連結する文字列
    :param y(float): 連結する整数
    :return (string): 文字列に連結して返す
    '''
    return x + str(y)

if __name__ == '__main__':
    print(func.__doc__)
    help(func)
    Docstrings : 関数の解説をここに記述していく
    :param x(string): 連結する文字列
    :param y(float): 連結する整数
    :return (string): 文字列に連結して返す
    
Help on function func in module __main__:

func(x, y)
    Docstrings : 関数の解説をここに記述していく
    :param x(string): 連結する文字列
    :param y(float): 連結する整数
    :return (string): 文字列に連結して返す

使い方わすれがちな関数

あくまで個人的に使う頻度が少ないやつ

all 関数

リスト内のすべての要素が True か判定する。
ひとつでも False が入っていれば False を返す。

print(all([True, True, True, True]))  #-> True
print(all([False, True, True, True])) #-> False
print(all([1, 1, 1, 1]))              #-> True

enumelate 関数

for 文で繰り返した回数を変数に格納できる

for i, j in enumerate(["zero", "one", "two"]):
    
    # i に繰り返した回数が入る
    print(i, j)

#-> 0 zero
#-> 1 one
#-> 2 two

zip 関数

for 文を回すときに複数のリストを一度に回せる。
個数が違うリストが含まれるときは余剰分の要素が省かれる。

a_l = [0, 1, 2]
b_l = ["zero", "one", "two"]
c_l = ["零", "一", "二", "三", "四", "五"]

for a, b, c in zip(a_l, b_l, c_l):
    print(a, b, c)
    

#-> 0 zero 零
#-> 1 one 一
#-> 2 two 二

# 余った c_l の 三 以降は無視される

ほとんど使わないけど稀に見かけて調べる機能

いつも混乱するやつ

アノテーション

関数の引数や戻り値の型を明示できる機能。

import random
from typing import List

# 引数が整数のリスト
# 戻り値が文字列のリスト であることを明示する

def func(arg_list: List[int]) -> List[str]:

    print(arg_list) #-> [343, 352, 370, 748, 991, 654, 876, 86, 54, 202]

    return_list = []
    [return_list.append(str(i)) for i in arg_list]

    return return_list

print(func([random.randint(0, 1000) for _ in range(10)]))
#-> ['343', '352', '370', '748', '991', '654', '876', '86', '54', '202']

仮想環境

Python のバージョン確認python -V
パスが通ってる Python のパス全て(プロンプト)where python

3系の仮想環境

仮想環境の作成python -m venv 環境名
仮想環境の有効化環境名\Scripts\Activate.ps1
仮想環境を抜けるdeactivate
requirements の作成pip freeze > requirements.txt

2系の仮想環境

virtualenv のインストールpip install virtualenv
仮想環境の作成python -m virtualenv 環境名
仮想環境の有効化 | コマンドプロンプトScripts\activate.bat
仮想環境の有効化 | PowerShell venv\Scripts\Activate.ps1
仮想環境を抜けるdeactivate
requirements の作成pip freeze > requirements.txt

pip の操作

パッケージのリスト pip list
インストールpip パッケージ名
アンインストールpip uninstall パッケージ名
pip のアップデートpip install --upgrade pip

pyenv

ローカルで使用する Python を切り替えるpyenv local 2.7.10
全体で使用する Python を切り替えるpyenv global 2.7.10
コマンドリストpyenv
バージョンの確認pyenv --version
インストールできるバージョンを確認pyenv install --list
pyenv で Python インストールpyenv install 2.7.10