文字列(str)の取り扱い
文字列はシーケンス型に分類され、連続したメモリ領域に格納された複数の文字から構成されます。各文字にはインデックス(添字)が割り当てられ、位置を指定してアクセス可能です。
負のインデックスの使用
Pythonでは、末尾からの参照を可能にする負のインデックスがサポートされています。たとえば、-1は最後の要素を指します。
s = "python study"
print(s[0]) # p
print(s[-6]) # s
スライスによる部分抽出
スライス記法[start:end:step]を使用することで、範囲指定で文字列の一部を取得できます。
print(s[2:8]) # thon s
print(s[:6]) # python
print(s[7:]) # tudy
print(s[::-1]) # yduts nohtyp(逆順)
print(s[1:10:2]) # yhnst(2ステップごと)
要素の存在確認
in演算子を使って、特定の文字列が含まれているかを判定できます。
print("study" in s) # True
連結と繰り返し
加算+で文字列を結合、乗算*で繰り返すことができます。
msg = "Hello" + " World"
line = "-" * 20
print(msg) # Hello World
print(line) # --------------------
アンパック操作
文字列を個別の変数に分解することも可能です。
a, b, c = "abc"
print(a, b, c) # a b c
リスト(list)の構造と操作
リストは柔軟なデータ格納構造で、異なる型のデータを一つの配列に混在させることができます。角括弧[]で囲まれ、カンマ区切りで要素を定義します。
items = [42, "programming", False, 3.14]
print(items[1]) # programming
print(items[-1]) # 3.14
スライスの応用例
nums = [10, 20, 30, 40, 50]
print(nums[1:4]) # [20, 30, 40]
print(nums[::2]) # [10, 30, 50]
print(nums[::-1]) # [50, 40, 30, 20, 10]
結合と複製
part1 = [1, 2]
part2 = [3, 4]
merged = part1 + part2
duplicated = part1 * 3
print(merged) # [1, 2, 3, 4]
print(duplicated) # [1, 2, 1, 2, 1, 2]
アンパックの利用
x, y = [100, 200]
print(x) # 100
タプル(tuple)の特徴
タプルは不変のシーケンス型で、一度作成すると内容を変更できません。丸括弧()で表現されますが、省略も可能です。単一要素の場合は末尾にカンマが必要です。
t = (1, 2, 3)
single = (4,) # 単一要素タプル
no_paren = 5, 6, 7 # 括弧省略可
共通操作の適用
インデックス、スライス、inチェック、結合・複製、アンパックなど、リストと同様の操作が可能です。
coords = (10, 20)
x, y = coords
print(x) # 10
# 要素の交換(再代入)
a = 1
b = 2
a, b = b, a
print(a, b) # 2 1
セット(set)の性質
セットは重複を許さないコレクションで、ハッシュ可能なオブジェクトのみを格納できます。中括弧{}で定義され、順序はありません。
unique_set = {1, 2, 3, 2, 1}
print(unique_set) # {1, 2, 3}
# 不変な型のみ格納可能
valid_set = {1, "hello", (1, 2)}
# invalid_set = {[1], {"a":1}} # TypeError
辞書(dict)の活用
キーと値のペアからなるデータ構造。3.7以降では挿入順が保証されています。
user = {
"name": "Tanaka",
"age": 30,
"skills": ["Python", "SQL"]
}
基本操作
- 取得:
user["name"] - 追加/更新:
user["city"] = "Tokyo" - 削除:
del user["age"] - キー存在確認:
"name" in user
メモリ最適化機構
Pythonは小規模なオブジェクトに対してメモリの効率化を図るため、同一値のオブジェクトを共有する仕組みを持っています。
IDによるメモリアドレス確認
a = 100
b = 100
print(id(a) == id(b)) # True(-5以上の整数はキャッシュ対象)
小データプールの対象
- 整数:-5 以上
- ブール値:True/False
- None オブジェクト
- 短い文字列(特に識別子風)
is 演算子の意味
==は値の等価性を、isは同一オブジェクト(同じメモリ)であるかを判定します。
print(10 == 10.0) # True
print(10 is 10.0) # False(型が異なる)
c = d = "cache_test"
print(c is d) # True(同一オブジェクト)
型変換のルール
暗黙的変換
異なる数値型の演算では自動的に精度の高い型に統一されます。
result1 = True + 5 # 6(bool → int)
result2 = 3 + 2.5 # 5.5(int → float)
明示的変換
int()、str()、float()、bool()などを使用。
num = int("456")
text = str(3.14)
flag = bool(0) # False
decimal = float("2.71")
コンテナ型の変換
- リスト → セット:重複除去
- 辞書 → リスト:キーの抽出
- タプル ↔ リスト:可変性の切り替え
# 重複除去の例
data_list = [1, 2, 2, 3, 1]
cleaned = list(set(data_list))
print(cleaned) # 順不同:[1, 2, 3]
# 辞書のキー抽出
keys = list(user.keys()) # ['name', 'age', 'skills']