リストの基本

リストは [ ]角括弧(ブラケット)を使う。

[要素1, 要素2, 要素3…]

python
[1, 2, 3, 4, 5]

# 文字列はダブルクォーテーションかシングルクォーテーションで囲む
["red", "green", "blue"]

Pythonは動的型付けなので、各要素に異なる型のデータを格納することも可能

python
[10, "桜木", True]

リストの要素を取得する

リストの各要素にアクセスするにはインデックス(添え字)を使う。

リスト[インデックス]

リストの要素を前から取得

インデックスは 0 からはじまり、その後 1, 2, 3, … と順番に割り当てられる。

[“red”, “green”, “blue”]

上記のリストの場合、インデックス0は 「red」 、インデックス1は 「green」、インデックス2が「blue」となる。

python
colors = ["red", "green", "blue"]


print(colors[0]) # red
print(colors[1]) # green
print(colors[2]) # blue

リストの要素を後ろから取得

インデックスを負の数にすると、リストの後ろから取得できる。
インデックス-1がリストの最後の要素にあたる。

python
colors = ["red", "green", "blue"]


print(colors[-1]) # blue
print(colors[-2]) # green
print(colors[-3]) # red

リストの要素を特定の位置指定で取得する(スライス)

[start:end:step]

start:始まりのインデックス
end:終わりは指定したendの一つ手前のインデックス(3で指定されていたら、インデックス2まで)
step:加算する数(指定がなければ 1 )

python
kana = ['あ', 'い', 'う', 'え', 'お']


print(kana[1:4]) # インデックス1からインデックス3
print(kana[:3]) # 先頭からインデックス2まで
print(kana[3:]) # インデックス3から最後まで
print(kana[1:4:2]) # インデックス1からインデックス3まで2ずつ加算


"""
結果:
['い', 'う', 'え']
['あ', 'い', 'う']
['え', 'お']
['い', 'え']
"""

リストの要素数を取得

len(リスト)

python
numbers = [3, 7, 12, 16, 25]


print(len(numbers))

リストに特定の値が含まれているか確認

値 in リスト

python
numbers = [3, 7, 12, 16, 25]

# 7が含まれていたらTrue
print(7 in numbers) # True

# 6が含まれていたらTrue
print(6 in numbers) # False


# not in だと逆になる
print(7 not in numbers) # False
print(6 not in numbers) # True

特定の値のインデックスを取得(index)

リスト.index(値)

python
numbers = [3, 7, 12, 16, 25]


print(numbers.index(16)) # 3

特定の値の数を取得(count)

リスト.count(値)

python
# リストの中に「3」 がいくつあるか
numbers = [3, 7, 3, 12, 16, 25]


print(numbers.count(3)) # 2

リストに要素を追加する

リストの最後に追加(append)

リスト.append(値)

python
numbers = [10, 30]
numbers.append(40)


print(numbers) # [10, 30, 40]

リストに別のリストの要素を追加する(extend)

リスト.extend(リストなどのイテラブルオブジェクト)

python
numbers = [10, 30]
numbers.extend([40,50])


print(numbers) # [10, 30, 40, 50]

もし、extendではなく append だった場合↓

python
numbers = [10, 30]
numbers.append([40,50])


print(numbers) # [10, 30, [40, 50]]

リスト自体が一つの要素として追加される。

指定した位置へ要素を追加する(insert)

リスト.insert(インデックス, 値)

指定したインデックスの位置に挿入される。

python
numbers = [10, 30, 40]
numbers.insert(1, 20)


print(numbers) # [10, 20, 30, 40]

スライス機能を使って要素を追加する

リスト[開始インデックス:終了インデックス] = 追加リスト

python
numbers = [10, 20, 30, 40, 50]
numbers[2:2] = ["A", "B"]


print(numbers)
# [10, 20, 'A', 'B', 30, 40, 50]

要素の置き換えもできる

python
numbers = [10, 20, 30, 40, 50]
numbers[1:4] = ["A", "B"]


print(numbers)
# [10, 'A', 'B', 50]

リストの要素を削除する

最後の要素 or インデックスで指定した要素を削除(pop)

リスト.pop()
リスト.pop(インデックス)

pop()メソッドは指定した位置の要素をリストから削除して、その要素を返します。
インデックスを指定しなければ、リストの最後の要素をリストから削除し、その要素の値を取得できる。
インデックス指定があれば、指定した位置の要素を削除し、その要素を取得できる。

python
numbers = [10, 20, 30, 40, 50]

print(numbers.pop())
# 50

print(numbers)
# [10, 20, 30, 40]


print(numbers.pop(2))
# 30

print(numbers)
# [10, 20, 40]

インデックスやスライスで位置・範囲を指定して削除(del)

del文もインデックスで指定して要素を削除するが、pop()メソッドと違い、値を返さない

del リスト[インデックス]

python
numbers = [10, 20, 30, 40, 50]
del numbers[2]


print(numbers)
# [10, 20, 40, 50]

スライスを使ってまとめて削除もできる。

del リスト[開始インデックス:終了インデックス]

python
numbers = [10, 20, 30, 40, 50]
del numbers[1:4]


print(numbers)
# [10, 50]

なんなら、del文使わなくてもスライス機能だけで削除できる。

python
numbers = [10, 20, 30, 40, 50]
numbers[1:4] = []


print(numbers)
# [10, 50]

特定の値を指定して削除(remove)

リスト.remove(値)

python
colors = ['red', 'blue', 'pink']
colors.remove('blue')


print(colors)
# ['red', 'pink']

削除したい値がリストの中に複数ある場合、最初の要素が削除される。

python
colors = ['red', 'blue', 'pink', 'blue']
colors.remove('blue')


print(colors)
# ['red', 'pink', 'blue']

全ての要素を削除(clear)

clear()メソッドでリスト内の全ての要素を削除する。

リスト.clear()

python
numbers = [10, 20, 30, 40, 50]
numbers.clear()


print(numbers)
# []

リストの結合

リスト1 + リスト2

python
list_1 = [10, 30]
list_2 = [40, 50]
new_list = list_1 + list_2


print(new_list) # [10, 30, 40, 50]

リストの要素を並び替える

リスト.sort()
リスト.sort(reverse = True)

python
numbers = [3, 2, 9, 1, 5]


# 昇順に並べ替え
numbers.sort()

print(numbers)
# [1, 2, 3, 5, 9]


# 降順に並べ替え
numbers.sort(reverse = True)

print(numbers)
# [9, 5, 3, 2, 1]

文字列、rangeからリストを作成

python
# 文字列をリスト化
lang = list('Python')
print(lang)
# ['P', 'y', 't', 'h', 'o', 'n']


# rangeを使ってリスト化
numbers = list(range(5))
print(numbers)
# [0, 1, 2, 3, 4]


#おまけ
sub_list = ["@"] * 5
print(sub_list)
# ['@', '@', '@', '@', '@']

リスト内包表記

リストを作成するときの方法のひとつ。
うまく使えば、シンプルにコードが書ける。
でも、複雑な内包表記は読みにくいので使う場所を考える。

リスト内包表記の基本型

[式 for 変数 in イテラブルオブジェクト]

python
# リスト内包表記を使用する方法
list_1 = [x*2 for x in range(5)]


# for文を使って要素を追加する方法
list_2 = []
for x in range(5):
    list_2.append(x*2)


# 表示は同じ
print(list_1)
print(list_2)
# [0, 2, 4, 6, 8]

条件分岐したリスト内包表記

[式 for 変数 in イテラブルオブジェクト if 条件式]

python
# リスト内包表記を使用する方法
list_1 = [i for i in range(15) if i % 3 == 0]


# for文を使って要素を追加する方法
list_2 = []
for i in range(15):
    if i % 3 == 0:
        list_2.append(i)


# 表示は同じ
print(list_1)
print(list_2)
# [0, 3, 6, 9, 12]