Pythonの基本データ型と操作手法

文字列(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']

タグ: Python str List tuple set

6月4日 20:01 投稿