はじめに
今回はリスト内包表記を扱います。for文が使えればリスト内包表記という便利な気泡を使うことができます。リスト内包表記により、既存のリストからあらたなリストの作成を簡潔におこなうことができます。また、処理速度もはやいため是非ともみにつけておきましょう。
リスト内包表記の基本
さっそく、はじめましょう。基本的な書式は次のようになります。
[処理 for 変数 in リスト if リスト要素に対する条件]
簡単な例で試してみましょう。要素が0から9までのリストは、通常のfor文では次のようにすることで次のようにつくることができます。
# for文でリストの作成
sample_list=[]
for i in range(10):
sample_list.append(i)
# リストの表示
sample_list
同じことをリスト内包表記を使うと次のように書くことができます。
# リスト内包表記でリストの作成
sample_list2=[i for i in range(10)]
# リストの表示
sample_list2
このようにリストを作成する部分のコードが非常にすっきりします。コードがすっきりするだけでなく、リスト内包表記は処理速度の面でも有用です。比較してみましょう。今度は100000までのリストで比較してみます。
# for文の場合の処理速度
%%timeit
sample_list=[]
for i in range(100000):
sample_list.append(i)
同じことをリスト内包表記でも試してみましょう。
# リスト内包表記の場合の処理速度
%%timeit
sample_list2=[i for i in range(100000)]
この例では倍以上の速度が出ていますね。これがリスト内包表記の威力です。さて、基本形がわかったところで、次の「条件式を加えたリスト内包表記」にすすみましょう。
条件式を加えたリスト内包表記
今度はリストを用意して、そこから偶数の要素を取り出して、3倍した結果をリストにすることを考えましょう。元のリストは次のものを使うことにしましょう。
original_list=[1,3,5,4,6,7,9,2,3,6,5,4,2,3]
まずはfor文でやってみます。
sample_list3=[]
for i in original_list:
if i%2==0:
sample_list3.append(i*3)
sample_list3
次に、同じことをリスト内包表記でやってみましょう。
sample_list4=[i*3 for i in original_list if i%2==0]
sample_list4
このようにリスト内包表記を使うと、コードが非常にすっきりします。if文によって抽出時の条件が加えられた形になっている、と考えれば簡単でしょう。最後に、「if~else」を含む場合も確認しておきましょう。
if ~ elseを含むリスト内包表記
少し、複雑になります。要素が偶数ではなかった場合は、「奇数」と表記することにしましょう。for文でかくと次のようになります。
sample_list5=[]
for i in original_list:
if i%2==0:
sample_list5.append(i*3)
else:
sample_list5.append('奇数')
sample_list5
これをリスト内包表記で書いてみましょう。elseを含む場合のリスト内包表記では、ifの位置が変わることに注意してください。
sample_list6=[i*3 if i%2==0 else '奇数' for i in original_list]
sample_list6
まとめ
いかがでしたか?リスト内包表記、便利ですね。else文があるときとないときでif文の位置が異なることに注意すれば、そんなに難しいこともありませんね。処理速度も速いので、しっかり身に着けて活用したいですね。
コメント