【Python】リスト内包表記

IT
  • リスト内包表記がなかなか馴染めなかったので、整理した

コードmemo

  • forループの場合とリスト内包表記の比較
# 通常のforループを使用した場合
doubled_evens = []
for i in range(1, 11):
    if i % 2 == 0:
        doubled_evens.append(i * 2)
print("通常のforループ: ", doubled_evens)

# リスト内包表記を使用した場合
doubled_evens_2 = []
doubled_evens_2 = [i * 2 for i in range(1, 11) if i % 2 == 0]
print("リスト内包表記: ", doubled_evens_2)
  • 実行結果
通常のforループ:  [4, 8, 12, 16, 20]
リスト内包表記:  [4, 8, 12, 16, 20]

リスト内包表記を使用するメリット

  • コード行数が減る
  • どのようなリストを作りたいかを直接的に表現できる(コードの焦点が異なる)
    • for文ループ→どのようにそれを行うか
    • リスト内包表記→何をするか
  • パフォーマンスの向上(内部で最適化されている)
    • この理由が大きいコードでは一番効いてくるかも→コードで確かめてみる

for文ループ vs リスト内包表記

  • リスト内包表記の方がだいぶ速かった
実行種類 実行時間(秒)
forループ 238.490651845932
リスト内包表記 95.48136496543884

for文ループの場合

import time

# 通常のforループを使う場合
start_time = time.time()
squared_numbers = []
for _ in range(1000):  # 1000回繰り返し
    for i in range(1000000):  # 100万回の二乗計算
        squared_numbers.append(i * i)
end_time = time.time()
print("実行時間:", end_time - start_time)
  • 実行結果
    実行時間: 238.490651845932

リスト内包表記の場合

import time

# リスト内包表記を使う場合
start_time = time.time()
for _ in range(1000):  # 1000回繰り返し
    squared_numbers = [i * i for i in range(1000000)]  # 100万回の二乗計算
end_time = time.time()
print("実行時間:", end_time - start_time)
  • 実行結果
    実行時間: 95.48136496543884

memo

  • リスト内包表記ははじめだと読みにくく感じる。慣れてきたらこちらの方が読みやすく感じるかも?
  • 大きいコードでは実行時間が大きく変わるので意識的に使って慣れたい

コメント

タイトルとURLをコピーしました