Pythonについての個人的なメモ

更新日 : 2023/11/3

仕事でよくPythonを使うので、最近改めてPythonを勉強し直しています。
その中で個人的に勉強になったことや、カンペとして残しておきたいことをまとめます。
めちゃくちゃ初歩的な内容も多いです笑

目次

    便利な関数(汎用系)

    メモとして残しておきたい関数のうち、汎用的なものを列挙します。

    input関数

    以下のように使用します。
    1input("何か入力してください。")
    このように入力することで、input()の中に記載した文字が表示された後にユーザーからの入力を受け付けます。
    戻り値の方はStringです。
    ちなみに、print関数と以下のような組み合わせ方も可能です。
    1print("こんにちは、" + input("名前を入力してください"))
    この書き方で、まずはユーザーに名前を入力させてその後に「こんにちは、〇〇〇〇」と表示することができます。

    len関数

    以下のように使用することで引数に渡した文字列や配列の長さを取得できます。
    1len(任意の文字列や配列)
    文字列も配列も0から数えた長さではなく、1から数えた長さの数値が返されることに注意しましょう。

    type関数

    以下のように使用することで引数に渡した変数の方を確認できます。
    1type(変数)

    便利な関数(数値系)

    メモとして残しておきたい関数のうち、数値の扱いに関連するものを列挙します。

    int関数, round関数, format関数

    引数に渡した変数をint型へ変換します。
    1int(変数)
    このint関数でfloatからintへ変換した場合、小数点以下は全て切り捨てられます。
    四捨五入したい場合は以下のようにround関数を使用しましょう。
    1round(変数)
    また、round関数では小数点何桁まで値を保持したいかを、以下のように引数で指定することができます。
    1float_num = 1.2345
    2round_num = round(float_num, 2) # → 二桁目まで残す
    3print(round_num) # → 1.23と表示される
    桁数の指定でいうと、format関数を使用しても桁数を指定できます。
    便利なことにこのformat関数もround関数と同じように、表示しない桁で勝手に四捨五入してくれます。
    1float_num = 1.2345
    2format_num = "{:.2f}".format(float_num) # → 二桁目まで残す
    3print(format_num) # → 1.23と表示される

    ceil関数

    小数点を切り上げてint型に変換してくれます。
    mathのインポートが必要です。
    1import math
    2
    3num = math.ceil(1.234)
    4print(num) # 「2」と表示される

    便利な関数(文字列系)

    メモとして残しておきたい関数のうち、文字列に関連するものを列挙します。

    lower関数

    大文字を含む文字列を全て小文字に変換します。
    1 文字列.lower() # ABC → abc へ変換など

    count関数

    文字列の中に含まれる特定の文字の数を返します。
    1 文字列.count("a") # 文字列に含まれる「a」の数をを返す

    title関数

    文字列の1文字目だけ大文字にした文字列に変換てくれます。
    2文字目以降の文字は大文字であっても小文字に変換されます。
    1 文字列.title() # 文字列の1文字目だけを大文字にした文字列を返す

    便利な関数(ランダム系)

    メモとして残しておきたい関数のうち、ランダム生成に関連するものを列挙します。

    random.random関数

    0〜1の範囲で乱数を生成します。
    1import random
    2                                    
    3random_num = random.random() # 0〜1の範囲で乱数を生成
    生成した乱数に何かしらの数字をかけてから使うことになるかと思います。 小数点のない乱数を生成したい場合は下記のrandint関数を使いましょう。

    random.randint関数

    指定した範囲で乱数を生成します。
    1import random
    2
    3random_num = random.randint(1, 10) # 1〜10の範囲で乱数を生成

    random.choice関数

    引数に渡した配列の中からランダムに1つの要素を選んで返してくれます。
    1import random
    2
    3array = [a, b, c, d]
    4result = random.choice(array) # 「a」「b」「c」「d」のどれかが返される

    random.shuffle関数

    リストの並び順をシャッフルしてくれる関数です。
    引数に渡したリストを直接書き換える動作となります。
    1import random
    2
    3list = [1, 2, 3, 4, 5]
    4random.shuffle(list)
    5print(my_list) # [4, 2, 5, 1, 3]などシャッフルしたリストが返される

    random.sample関数

    リスト、タプル、文字列の並びをシャッフルしてリストとして結果を返してくれる関数です。
    第一引数にシャッフルしたいリスト(またはタプル、文字列)を、
    第二引数にシャッフルした結果から取得したい要素数を指定します。
    また、引数に渡した元のリストや文字列を直接書き換えることはなく、戻り値として新しい結果を返す動作となります。
    リストの場合は上に書いたshuffle関数でも問題ない場面もあるので、今回は文字列をシャッフルするコードを書きます。
    1import random
    2
    3str = "abcde"
    4shuffled_str_list = random.sample(str, len(str)) # 第一引数にシャッフルしたい文字列を、第二引数にシャッフルした結果から取得したい要素数を指定
    5print(shuffled_str_list) # ['b', 'd', 'a', 'c', 'e']など返り値はリストになる
    6
    7shuffled_str = "".join(shuffled_str_list) # join関数を使ってリストを文字列に戻す
    8print(shuffled_str) # 「bdace」の文字列になる

    便利な関数(リスト系)

    メモとして残しておきたい関数のうち、リスト(配列)に関連するものを列挙します。

    extend関数

    ある配列に別の配列を結合したい場合は以下のように書きます。
    1array1 = [1, 2, 3]
    2array2 = [4, 5, 6]
    3
    4array1.extend(array2)
    5print(array1) # 「1, 2, 3, 4, 5, 6」と表示される

    range関数

    for文で頻繁に使用するrange関数ですが、3つ目の引数で値の増える量を指定することができます。
    1for number in range(1, 11, 3)
    2    print(number) # 1 4 7 10 が表示される
    また、返される値の範囲は、2つ目の引数に与えた値未満の範囲になることにも注意しましょう。
    上記の例だと、2つ目の引数に「11」を指定しているので、「10」までループが実行されます。

    index関数

    配列の中のある要素が何番目のインデックスにあるかを返してくれます。
    1array = ["a", "b", "c", "d", "e"]
    2position = array.index("d")
    3
    4print(position) # 3 が表示される
    また、返される値の範囲は、2つ目の引数に与えた値未満の範囲になることにも注意しましょう。
    上記の例だと、2つ目の引数に「11」を指定しているので、「10」までループが実行されます。

    その他小技

    上記以外でへえーと思ったものをまとめます。

    数値の可視性向上

    とても大きな数値を扱う時、あまりにも桁が多いと分かり辛いですよね。 Pythonでは3桁区切りにアンダースコアで区切ることができます。
    1a = 123456789
    2b = 123_456_789 # Pythonが「_」は無視してくれる

    文字列の特定のインデックス番目の文字を取得

    以下のように書くことで、文字列の特定のインデックス番目の文字を取得することができます。
    1str = "Hello"
    2str[1] # 一番目の文字を取得 → H
    3"Hello"[1]  # 同じく一番目の文字を取得 → H

    指数の計算

    Pythonでは以下のような書き方で指数の計算を行うことができます。
    1result = 2 ** 3
    2print(result) # 2の3乗で「8」が表示される

    小数点以下を切り落として除算

    以下のように書くことで、小数点以下を切り落として除算することができます。
    1result = 8 // 3 # 普通に割ると 2.666666666....
    2print(result) # でも2になる

    String型以外の変数をString型へ変換して文字列を作成

    単純にキャスト用の関数を使ってプラス記号で繋ぐことでも可能ですが、以下のように書くことでよりスマートにかけます。
    1name = "Jon"
    2age = 20
    3print(f"My name is {name}. I'm {age} years old.") # 「My name is Jon. I'm 20 years old.」と表示される

    変数の入れ替え

    Pythonで変数を入れ替えたい場合、以下のように書くことで入れ替えることができます。
    1a = 1
    2b = 2
    3
    4b, a = a, b # 変数を入れ替える
    5
    6print(a) # 2と表示される
    7print(b) # 1と表示される
    便利ですね。

    文字列を改行しながら定義

    メール本文など、長い文字列を書く時はきりの良いところで改行したいですよね。
    Pythonでは以下のように書くことで改行しながら文字列を定義することができます。
    1str = '''
    2一行目の文字列です。
    3改行しました。
    43行目の文字列です。
    5いくらでもかけます。
    6'''

    配列の末尾の要素を参照

    配列を末尾の要素を取得する時は以下のようにマイナス記号をつけることで参照できます。
    1array = [1, 2, 3, 4, 5, 6]
    2print(array[-1]) # 「6」が表示される

    文字列から一文字ずつ抽出して処理する

    いくつか方法はあって基本的には配列と同じような感じでfor文で実現できます。
    まずは一番シンプルな方法です。
    1text = "Hello, World!"
    2for char in text:
    3    print(char) # 「Hello, World!」と表示される
    続いて、何番目の文字かの情報を扱いたい場合などは、以下の様な書き方もできます。
    1text = "Hello, World!"
    2for i in range(len(text)):
    3    char = text[i]
    4    print(char) # 「Hello, World!」と表示される

    要素数を指定してリストを作成

    要素数を指定してかつ、初期値を任意のものに設定するには以下のようにします。
    1length = 5  # リストの長さを指定
    2my_list = []
    3for i in range(length):
    4    my_list.append(1)  # 初期値を追加する
    5print(my_list) # [1, 1, 1, 1, 1]が表示される

    リストが特定の要素を含んでいるかの確認

    あるリストが特定の要素を含んでいるかどうかは以下のようにして確認できます。
    1list = ['a', 'b', 'c']
    2
    3result1 = 'a' in list
    4print(result1) # True
    5result2 = 'e' in list
    6print(result2) # False

    一行で1つのファイルから複数の変数、関数をインポート

    以下のように書くことで、一行で1つのファイルから複数の変数や関数をインポートすることができます。
    1from modules_file import module1, module2 #「modules_file」というファイルから「module1」と「module2」をインポートする場合

    引数名を指定して関数を実行

    関数実行時、以下のように書くことで引数名を指定して関数を実行することができます。
    1def function(a, b, c):
    2    print(a) # 1
    3    print(b) # 2
    4    print(c) # 3
    5
    6function(c = 3, a = 1, b = 2) # 引数名を指定して関数を実行

    配列内の要素を左シフト

    配列の内の要素を指定した数分だけシフトする方法です。
    1array = [1, 2, 3, 4, 5]
    2shift_num = 2
    3
    4shifted_array = array[shift:] + array[:shift]
    5
    6print(shifted_array) # [3, 4, 5, 1, 2]

    辞書をfor文で処理

    めちゃくちゃ初歩的ですが、辞書型のデータをfor文で処理する際は以下のように書きます。
    1dictionary = {
    2    "key1": "value1"
    3    "key2": "value2"
    4    "key3": "value3"
    5}
    6
    7for key in dictionary:
    8    print(key) # キーが順番に出力される
    9    print(dictionary[key]) # 値が順番に出力される

    辞書のネスト

    これまためちゃくちゃ初歩的ですが、辞書型のデータの中に辞書やリストをネストすることができます。
    1dictionary = {
    2    "key1": ["value1", "value2", "value3"]
    3    "key2": {"key3": "value4"}
    4}

    Docstringの書き方

    Docstringと呼ばれるもので関数の説明を設定することができます。
    関数名を途中まで入力するとよく出てくる説明文ですね。
    関数名を定義した次の行に3つのダブルコーテーションで囲むことで書くことができます。
    1def function():
    2    """
    3    ここに関数の説明を書く
    4    """
    5    a = 1
    6    b = 2
    7    ....

    辞書のvalueに関数を指定

    そんなに使うことはないかもしれませんが、辞書のvalueには関数を設定することもできます。
    1def function():
    2    print("This is a function")
    3
    4dict = {
    5    key: function # valueに↑で定義した関数を設定
    6}
    7
    8executed_function = dict[key] # 関数を辞書から取得
    9executed_function() # 辞書から取得した関数を実行
    10
    11dict[key]() # そのまま実行することも可能

    空の関数やクラスを定義(pass)

    関数やクラスの定義だけ先にしておいて実装を後回しにしたい場合などに、定義した関数やクラスの中にpassと記載することでエラーなく実行することができます。
    1def function():
    2    pass
    3
    4function() # エラーなくプログラムが終了される
    Pythonは関数やクラス、ifforなどの:の後の行に何も書かないとエラーになってしまうので、その回避策ですね。

    その他メモ

    上記以外でその他メモとして残しておきたいものを書きます。

    二次元配列について

    以下のように書くと二次元配列を作ることができるのですが、この書き方だと配列のコピーが渡されるわけではなく、配列の参照が渡されます。
    1array1 = [1, 2, 3]
    2array2 = [4, 5, 6]
    3array3 = [array1, array2] # 二次元配列を作成
    4
    5array3[0][0] = 10 # 作成した二次元配列の要素を書き換え
    6print(array1[0]) # 「10」と表示される
    そのため、作成した二次元配列から値と書き換えると、元の配列の値も書き換えらます。

    最後に

    以上、Pythonの復習で個人的に勉強になったことをまとめました。

    それでは!