ユーニックス総合研究所

  • home
  • archives
  • python-append-for

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

  • 作成日: 2022-03-29
  • 更新日: 2023-12-26
  • カテゴリ: Python

Pythonのappendをfor文で使う方法

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

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

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

関連記事

頭が悪い人のPythonのevalの使い方
頭がいい人のPythonのexitの使い方
状態遷移による文字列パースのテクニック【Python】
形態素解析で代名詞+助詞+名詞を文章から抜き出す【Python, 自然言語処理, Janome】
在宅・未経験、Pythonで稼ぐ方法は?【取引・宣伝・広告】

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]]  

🦝 < ぎょ、なんだこれは

🐭 < すごいコードだ

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でデータを追加しよう

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