繰り返し

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]