Python プログラミング メモ

Python リスト内包表記のすゝめ

Pythonでデータを処理する場合、リストに格納して処理していくってパターンはスゴく多いと思います。

基本的なリストの格納方法は以下のようなものがあります。

# 1 ~ 20 の数字で偶数のみリストに格納した後に要素を出力する

#空のリスト作成
l = []

#ループで回して偶数のみ、リスト l に格納していく
for i in range(1, 21):
    if i % 2 == 0:
        l.append(i)

#リストの要素を出力
print(*l)

#出力結果 2 4 6 8 10 12 14 16 18 20

 

で、Pythonの入門書とか読みますと、ほとんどコノ書き方を紹介しています。

基本中の基本なので、当然ですが・・・。

そして、「内包表記を使うと、もっと簡潔に書けるんだよ!」って紹介されている場合が多いです。

リスト内包表記を使って同じ結果が出るように書き直すと以下のようになります。

# 1 ~ 20 の数字で偶数のみリストに格納した後に要素を出力する

#偶数のみ、リスト l に格納していく
l = [i for i in range(1, 21) if i % 2 == 0]

#リストの要素を出力
print(*l)

#出力結果 2 4 6 8 10 12 14 16 18 20

 

実際に2番目の実装で出力しても、結果は同じです。

4行必要だった部分が1行で同じ結果が出るようになりました。

私は、こういった解説を読んでも、「なんか、とっつき難いなぁ・・・基本的な書き方でいいか。」

って思って、しばらく内包表記を使わなかったのですが、しばらく書きまくって慣れてくると 「いちいち、appendなんて書くの面倒くさっ」ってなります。

絶対になります。

いや、たぶん、なります。

多くの方が入門書的な段階から内包表記を推しているのは、慣れるとメッチャ書きやすいからです。

だから、内包表記が存在しているのだと思います。

 

っで、今回、内包表記について書いておこうと思った理由は、「標準入力で値を受け取って、それをリストに一発で格納できないのかな?」って思ったからです。

色々、ググってみた結果・・・

見つかりませんでした。

なので、こんな感じになりました。

#内包表記で1 ~ 20の値を標準入力で受け取ってリストを作成
l = [int(input()) for i in range(1, 21)]

#内包表記でリスト l に格納されている偶数の要素のみ l に格納し直す
l = [l[i] for i in range(len(l)) if l[i] % 2 == 0]

#リスト l を出力する
print(*l)

#出力結果
#2 4 6 8 10 12 14 16 18 20

 

期待する結果は得られるんですが、何かカッコ悪い感じの実装ですね。

仕方ないのかな?

直接、インプットした値を条件付きで格納できたら素晴らしいと思ったのですが、私には無理でした。

そもそも、できない事を無理矢理やろうとしてるだけなのかも知れません。

あとで、もうちょっと調べてみようかな?

とりあえず、今日はこんなところで終わろうかと思います。

 

-Python, プログラミング, メモ

Copyright© donguri.pyのblog , 2024 All Rights Reserved.