Pythonチートシート

入門 | 15分 で読める | 2025.01.10

基本構文

変数と型

# 変数
name = "Alice"
age = 25
price = 19.99
is_active = True

# 型確認
type(name)  # <class 'str'>

# 型変換
int("42")      # 42
str(42)        # "42"
float("3.14")  # 3.14
bool(1)        # True
list("abc")    # ['a', 'b', 'c']

文字列

# フォーマット
name = "Alice"
f"Hello, {name}!"  # f-string(推奨)
"Hello, {}!".format(name)
"Hello, %s!" % name

# メソッド
s = "hello world"
s.upper()        # "HELLO WORLD"
s.lower()        # "hello world"
s.capitalize()   # "Hello world"
s.title()        # "Hello World"
s.strip()        # 空白除去
s.split()        # ['hello', 'world']
s.replace("l", "L")  # "heLLo worLd"
s.startswith("h")    # True
s.endswith("d")      # True
"o" in s         # True

# スライス
s[0]      # 'h'
s[-1]     # 'd'
s[0:5]    # 'hello'
s[::2]    # 'hlowrd'
s[::-1]   # 'dlrow olleh'(逆順)

リスト

# 作成
items = [1, 2, 3, 4, 5]
items = list(range(1, 6))

# 操作
items.append(6)        # 末尾に追加
items.insert(0, 0)     # 位置指定で追加
items.extend([7, 8])   # 結合
items.pop()            # 末尾を削除して返す
items.pop(0)           # 位置指定で削除
items.remove(3)        # 値指定で削除
items.index(2)         # 値のインデックス
items.count(2)         # 値の出現回数
items.sort()           # ソート(破壊的)
items.reverse()        # 逆順(破壊的)
sorted(items)          # ソート(非破壊的)
len(items)             # 長さ

# スライス
items[1:3]     # [2, 3]
items[::2]     # [1, 3, 5]
items[-3:]     # 最後の3つ

# 内包表記
squares = [x**2 for x in range(10)]
evens = [x for x in range(10) if x % 2 == 0]
matrix = [[i*j for j in range(3)] for i in range(3)]

辞書

# 作成
user = {"name": "Alice", "age": 25}
user = dict(name="Alice", age=25)

# 操作
user["email"] = "alice@example.com"  # 追加/更新
user.get("name")          # "Alice"
user.get("phone", "N/A")  # デフォルト値
user.keys()               # dict_keys(['name', 'age', 'email'])
user.values()             # dict_values(['Alice', 25, ...])
user.items()              # dict_items([('name', 'Alice'), ...])
user.pop("age")           # 削除して返す
user.update({"city": "Tokyo"})  # マージ
"name" in user            # True

# 内包表記
squares = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

セット

# 作成
s = {1, 2, 3}
s = set([1, 2, 2, 3])  # {1, 2, 3}

# 操作
s.add(4)
s.remove(1)       # なければエラー
s.discard(1)      # なくてもOK
s.pop()           # ランダムに削除

# 集合演算
a = {1, 2, 3}
b = {2, 3, 4}
a | b   # 和集合 {1, 2, 3, 4}
a & b   # 積集合 {2, 3}
a - b   # 差集合 {1}
a ^ b   # 対称差 {1, 4}

制御構文

条件分岐

if x > 0:
    print("positive")
elif x < 0:
    print("negative")
else:
    print("zero")

# 三項演算子
result = "even" if x % 2 == 0 else "odd"

# match文(Python 3.10+)
match status:
    case "pending":
        print("保留中")
    case "approved":
        print("承認済み")
    case _:
        print("不明")

ループ

# for
for i in range(5):
    print(i)

for item in items:
    print(item)

for i, item in enumerate(items):
    print(i, item)

for key, value in user.items():
    print(key, value)

# while
while condition:
    # 処理
    if should_break:
        break
    if should_skip:
        continue

関数

# 基本
def greet(name: str) -> str:
    return f"Hello, {name}!"

# デフォルト引数
def greet(name: str = "World") -> str:
    return f"Hello, {name}!"

# 可変長引数
def sum_all(*args):
    return sum(args)

def create_user(**kwargs):
    return kwargs

# ラムダ
square = lambda x: x ** 2
sorted(items, key=lambda x: x["name"])

クラス

from dataclasses import dataclass
from typing import Optional

# 通常のクラス
class User:
    def __init__(self, name: str, age: int):
        self.name = name
        self.age = age

    def greet(self) -> str:
        return f"Hello, {self.name}!"

# dataclass(推奨)
@dataclass
class User:
    name: str
    age: int
    email: Optional[str] = None

    def greet(self) -> str:
        return f"Hello, {self.name}!"

ファイル操作

# 読み込み
with open("file.txt", "r", encoding="utf-8") as f:
    content = f.read()
    lines = f.readlines()

# 書き込み
with open("file.txt", "w", encoding="utf-8") as f:
    f.write("Hello, World!")

# JSON
import json

with open("data.json", "r") as f:
    data = json.load(f)

with open("data.json", "w") as f:
    json.dump(data, f, indent=2, ensure_ascii=False)

例外処理

try:
    result = 10 / 0
except ZeroDivisionError:
    print("ゼロ除算エラー")
except Exception as e:
    print(f"エラー: {e}")
else:
    print("成功")
finally:
    print("常に実行")

# 例外発生
raise ValueError("無効な値です")

よく使うモジュール

# パス操作
from pathlib import Path
path = Path("dir/file.txt")
path.exists()
path.is_file()
path.read_text()
path.write_text("content")
path.parent
path.stem  # 拡張子なしファイル名

# 日時
from datetime import datetime, timedelta
now = datetime.now()
now.strftime("%Y-%m-%d %H:%M:%S")
datetime.strptime("2025-01-10", "%Y-%m-%d")
now + timedelta(days=7)

# 正規表現
import re
re.match(r"\d+", "123abc")
re.search(r"\d+", "abc123")
re.findall(r"\d+", "a1b2c3")  # ['1', '2', '3']
re.sub(r"\d+", "X", "a1b2")   # "aXbX"

# HTTP
import requests
res = requests.get("https://api.example.com/data")
res.json()
requests.post(url, json={"key": "value"})

関連記事

← 一覧に戻る