リストの作成と基本操作
リストはPythonで最もよく使われるデータ構造の一つです。以下のようにさまざまな方法で作成できます。
items = ['apple', 'banana', 'orange']
print(items)
# 文字列からリストを作成
chars = list('programming')
numbers = list(range(2, 15, 4)) # 2から15まで、ステップ4(15を含まない)
print(chars)
print(numbers)
# リストの結合と統計
combined = items + chars + numbers
print(combined)
print(max(numbers))
print(min(numbers))
print(len(items)) # リストの長さを取得
print(chars.count('r')) # 'r'の出現回数をカウント
print(chars.index('a')) # 'a'が最初に現れる位置
del numbers # numbersリストを削除
リスト要素の走査方法
リストの要素にアクセスするには複数の方法があります:
data = ['python', 'java', 'javascript', 'go']
for element in data:
print(element) # 順番に出力される
# range()とlen()を使用
for i in range(0, len(data)):
print(f"{i} -> {data[i]}")
# enumerate()を使用
for position, value in enumerate(data):
print(position, value) # positionは番号、デフォルトは0から開始
# 開始番号を指定
for position, value in enumerate(data, start=1):
print(position, value)
リストの主なメソッド
| メソッド名 | 説明 |
| container.append(value) | リストの末尾に要素を追加 |
| container.insert(location, value) | 指定された位置に要素を挿入 |
| container.clear() | リストのすべての要素を削除 |
| container.pop(location) | 指定位置の要素を取得し、リストから削除 |
| container.remove(value) | 最初に見つかった指定要素を削除 |
| container.reverse() | リストの要素を逆順にする |
| container.copy() | 新しいリストとしてコピーを作成 |
sample_list = ['a', 'b', 'c']
print('初期状態', sample_list, id(sample_list))
sample_list.append('d')
print('追加後', sample_list, id(sample_list))
# 要素追加後もメモリアドレスは変化しない
sample_list.remove('a')
print(sample_list, id(sample_list))
print(sample_list.pop(1)) # 指定位置の要素を取得して削除
print(sample_list)
リストの並び替え
リストの並び替えにはsortメソッドとsorted関数があります:
alphabet = ['D', 'A', 'C', 'B']
# sortメソッド:リスト自体を並び替える
alphabet.sort() # 昇順
print('昇順:', alphabet)
alphabet.sort(reverse=True) # 降順
print('降順:', alphabet)
# 大文字小文字を区別せずに並び替え
mixed_case = ['Apple', 'banana', 'Cherry', 'date']
mixed_case.sort(key=str.lower)
print('大文字小文字無視:', mixed_case)
# sorted関数:新しいリストを返す
original = ['z', 'a', 'm', 'k']
ascending = sorted(original)
descending = sorted(original, reverse=True)
print('元のリスト:', original)
print('昇順:', ascending)
print('降順:', descending)
リスト内包表記
簡潔にリストを作成する方法です:
import random
# 基本的な内包表記
values = [num for num in range(1, 6)]
print(values)
# 各要素を2乗したリスト
squares = [num * num for num in range(1, 6)]
print(squares)
# ランダムな値を含むリスト
random_values = [random.randint(1, 50) for _ in range(8)]
print(random_values)
# 条件付きリスト
even_numbers = [n for n in range(20) if n % 2 == 0]
print(even_numbers)
二次元リスト
リストのリストとして二次元データを表現できます:
# 二次元リストの作成
matrix = [
['name', 'age', 'city'],
['Alice', 25, 'Tokyo'],
['Bob', 30, 'Osaka'],
['Charlie', 35, 'Kyoto']
]
# 二重ループで走査
for row in matrix:
for cell in row:
print(cell, end='\t')
print() # 改行
# 内包表記で二次元リストを作成
grid = [[col for col in range(3)] for row in range(5)]
print(grid)
タプルの作成と操作
タプルは変更できないシーケンスです:
# タプルの作成
coordinates = ('x', 'y', 'z')
nested_tuple = ('hello', [1, 2, 3], 'world')
print(nested_tuple)
# tuple()関数で作成
char_tuple = tuple('python')
list_tuple = tuple([1, 2, 3, 4])
print(char_tuple)
print(list_tuple)
# タプルの検索と統計
print('2が含まれるか:', (2 in list_tuple))
print('最大値:', max(list_tuple))
print('最小値:', min(list_tuple))
print('長さ:', len(list_tuple))
print('インデックス:', list_tuple.index(2))
print('カウント:', list_tuple.count(2))
# 単一要素のタプル
single_num = (5) # これは整数
single_tuple = (5,) # これはタプル
print(type(single_num), type(single_tuple))
タプルのアクセスと走査
タプルはリストと同様にアクセスできますが、変更はできません:
elements = ('red', 'green', 'blue')
# インデックスによるアクセス
print(elements[0])
# スライス操作
subset = elements[0:2:1] # 0から2まで、ステップ1
print(subset)
# 走査方法
for item in elements:
print(item)
for idx in range(len(elements)):
print(idx, elements[idx])
for index, value in enumerate(elements):
print(f"{index} -> {value}")
タプル内包表記
タプル内包表記は実際にはジェネレータオブジェクトを生成します:
# 方法1: タプルに変換
gen = (x for x in range(1, 4))
print(gen) # ジェネレータオブジェクト
result_tuple = tuple(gen)
print(result_tuple)
# 方法2: 走査による消費
gen2 = (x for x in range(1, 4))
for val in gen2:
print(val)
# 方法3: __next__()メソッド
gen3 = (x for x in range(1, 4))
print(gen3.__next__())
print(gen3.__next__())
print(gen3.__next__())
# 全て取り出した後、空のタプルになる
empty_tuple = tuple(gen3)
print(empty_tuple)
タプルは変更不可能なシーケンスであり、リストは変更可能なシーケンスです。通常、タプルの方がリストよりもアクセス速度が速いという特徴があります。