Pythonのappendをfor文で使う方法【初心者向け】

439, 2022-03-29

目次

Pythonのappendをfor文で使う方法

Pythonではリストというデータ構造を使うことができます。
複数のデータをまとめる時はリストを使うのが一般的です。

リストにデータを追加するには「append」というリストのメソッドを使います。
これを使うことでリストにデータを追加することができます。

今回はこのappendとfor文を組み合わせて使う方法を解説します。

関連記事
Pythonのリストにデータを追加(append)する方法【extend, insert, スライス】
Pythonでbytes型をstr型に(byte to string)変換する
Pythonのリストのappend()の使い方【初心者向け完全解説】
Pythonで複数のフォルダを作成する方法【os.mkdir, os.makedirs】
Pythonの可変長引数(args, *kwargs)にリスト、タプル、辞書を展開して渡す

appendの使い方

最初にappendの使い方を簡単に解説します。
appendはリストのメソッドです。

↓のようにhelp関数でappendメソッドの使い方を見ることができます。
興味がある人は見てみてください。

help([].append)

appendメソッドは引数を1つ取ります。
引数にはリストの末尾に追加したいデータを指定します。
たとえばリストに整数を追加したい場合は↓のようにします。

lis = []

lis.append(1)

print(lis)  # [1]

appendメソッドは何度でも呼び出すことができます。
データを次々に追加したい場合はappendメソッドをその都度呼び出します。

lis = []

lis.append(1)
lis.append(2)
lis.append(3)

print(lis)  # [1, 2, 3]

appendメソッドの返り値はNoneです。

print([].append(1))  # None

for文でappendを使う

for文でappendを使う方法です。
たとえばリストに0から4までの整数を追加したい場合は↓のようにします。

lis = []
for i in range(4):
    lis.append(i)

print(lis)  # [0, 1, 2, 3]

このようにfor文でカウント変数iをリストにappendしていきます。

このような処理を実現したい場合はもっと手っ取り早い方法もあります。
それはrange関数を使う方法です。
range関数の結果をリストに渡すと、それだけで数列が生成されます。
0から4までの整数を持つリストを作りたい場合は、

lis = list(range(4))

print(lis)  # [0, 1, 2, 3]

だけで済みます。
このような単純な数列を持つリストを作りたい場合はrangeを使ったほうがお手軽かもしれません。

rangeについては↓の記事で詳しく解説しています。

あとはリスト内包表記を使う方法もあります。
内包表記はfor文の親戚ですが、for文よりコンパクトに書けます。

lis = [i for i in range(4)]

print(lis)  # [0, 1, 2, 3]

for文については↓の記事で詳しく解説しています。

for文で2の倍数の数列を持つリストを作る

先ほどのfor文の応用です。
2の倍数の数列を持つリストを作りたい場合は↓のようにします。

lis = []

for i in range(0, 10, 2):
    lis.append(i)

print(lis)  # [0, 2, 4, 6, 8]

range(0, 10, 2)の「0」は始点となる数値、「10」は終点となる数値です。
3つ目の引数の「2」はステップ数で、ループごとに加算する数値です。
このrangeは0から10より下まで回し、2ずつ増加させていきます。

あるいはこういう書き方も出来ます。

lis = []

for i in range(5):
    lis.append(i * 2)

print(lis)  # [0, 2, 4, 6, 8]

rangeとリストを組み合わせる場合は↓のようにも書けます。

lis = list(range(0, 10, 2))

print(lis)  # [0, 2, 4, 6, 8]

リスト内包表記では↓のように書けます。

lis = [i for i in range(0, 10, 2)]

print(lis)  # [0, 2, 4, 6, 8]

lis = [i * 2 for i in range(5)]

print(lis)  # [0, 2, 4, 6, 8]

2重のfor文で行列を作る

2重のfor文とappendを組み合わせると行列(マトリックス)を作ることができます。

mat = []

for i in range(4):
    row = []
    for j in range(4):
        row.append(i + j)

    mat.append(row)

print(mat)
# [[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]

↑のコードの「mat」は「matrix(マトリックス)」の「mat」です。
これに行列が保存されます。

1つ目のfor文であるfor i in range(4):を書きます。
この内側でrow = []とやって行列の行を初期化します。

それから2つ目のfor文であるfor j in range(4):を書きます。
このfor文の中ではrowに値を追加します。

2つ目のfor文が終わったらrowmatに保存します。
こうすることで行列を生成できます。

リスト内包表記を使う場合は↓のように書けます。

mat = [[i + j for j in range(4)] for i in range(4)]

print(mat)
# [[0, 1, 2, 3], [1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
(^ _ ^)

ぎょ、なんだこれは

(・ v ・)

すごいコードだ

appendの速度

一般にappendは遅いと言われています。
range, リスト内包表記と比較して速度を計測してみましょう。
↓は計測に使ったコードです。

import time

n = 100000000

# appendの計測

start = time.time()

lis = []
for i in range(n):
    lis.append(i)

calc_time = time.time() - start
print(f'append: {calc_time}秒')

# rangeの計測

start = time.time()

lis = list(range(n))

calc_time = time.time() - start
print(f'range: {calc_time}秒')

# リスト内包表記の計測

start = time.time()

lis = [i for i in range(n)]

calc_time = time.time() - start
print(f'リスト内包表記: {calc_time}秒')

結果は↓のようになりました。

append: 7.754670143127441秒
range: 3.5498831272125244秒
リスト内包表記: 4.708288192749023秒

一番遅いのはappend, 次いでリスト内包表記、そして一番早いのはrangeになりました。
このようにappendは速度があまり出ないので、速度が必要になる場面では多用は控えたほうが無難かもしれません。
複雑な処理を必要とせずにrangeを使える場合はrangeで数列を作ったほうが速いみたいです。

おわりに

今回はPythonのfor文でリストのappendメソッドを使う方法を解説しました。
appendは速度がネックになることもありますが、たいていの場合はそこまで神経質になる必要もないでしょう。
そもそも速度が必要ならPythonではなく他の言語を使ったほうが良いと思います。

(^ _ ^)

appendでデータを追加しよう

(・ v ・)

appendは「添える」、「付加する」という意味だよ


この記事のアンケートを送信する