繰り返し
for文
for文を使うことで、リストの中身を展開して、一つ一つ処理することができます。
for i in [1, 2, 3, 4, 5]:
print(i)
range()関数を使えば動的にリストを作成することができるため、for文と組み合わせて使われます。
for i in range(100): # [0, 1, 2, ..., 99] に変換される
print(i)
while文
while文を使うことで、条件を満たしている間だけ繰り返す処理を行うことができます。
while i < 10:
print(i)
i += 1
breakとcontinue
繰り返しの途中で強制的に繰り返しを抜けたい場合にはbreakを使用します。また、後続の処理をスキップして次の反復に進みたい場合はcontinueを使用します。
else
Pythonでは繰り返しの最後にelse文を書くことができます。繰り返しの途中で抜けずに最後まで処理が行われた場合のみelse文の中身が実行されます。
for i in range(10):
print(i)
else:
print('Done') # 最後にDoneと表示される
for i in range(10):
print(i)
break
else:
print('Done') # breakでループを抜けているのでこの行は実行されない
内包表記
内容表記は、リストの要素を操作して新しいリストを作るための記法です。for文を利用するのに比べ、簡潔に記述することができます。
list = [1, 2, 3, 4, 5]
new_list = [item * 2 for item in list]
print(new_list )
# [2, 4, 6, 8, 10]
ifを使うと、特定の条件を満たす要素のみ加えることも可能です。
list = [1, 2, 3, 4, 5]
new_list = [item * 2 for item in list if item > 3]
print(new_list )
# [8, 10]
map関数
リストのそれぞれの要素に対して繰り返し処理をしたいときはmapが便利です
mapの一つ目の引数には各要素に適応したい関数を指定します。
たとえば数字の文字のリストをint型のリストに変換したい場合は以下のように書けます。
my_list = ['1', '2', '3']
new_list = list(map(int, my_list))
mapはmap objectを返すためリストとして使うにはlist()で囲む必要があります
lambda関数を使用することもできます
my_list = [1, 2, 3]
new_list = list(map(lambda x: x * 2, my_list)) // 各要素を2倍したリストを返す [2, 4, 6]
groupby
リストの中の同じ値をグルーピングする関数です。
左から順に値をみていき、値が変わるたびに新しいグループを生成します
関数を実行するとキーとグループを返すイテレータを作成します
my_list = [1, 1, 1, 2, 2, 3, 3, 1]
for key, group in itertools.groupby(my_list):
print(key, list(group))
# 以下が表示されます。(キー: グループ)
# 1 [1, 1, 1]
# 2 [2, 2]
# 3 [3, 3]
# 1 [1]