python リスト内包表記のメモ
リスト内包表記の書き方
リスト内包表記とはリストの中にコードを書いてリストを作成する手法のことである。
square = [i ** 2 for i in range(10)]
# >> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
リスト内包表記では、if文で分岐する記載も可能である。
even_square = [i ** 2 for i in range(1:10) if i % 2 == 0]
# >> [4, 16, 36, 64]
if-else文での分岐処理も可能である。
ただしif文のみで作成する場合とは順番が異なることに注意が必要である。
odd_and_even_square = [i ** 2 if i % 2 == 0 else i for i in range(1, 10)]
# >> [1, 4, 3, 16, 5, 36, 7, 64, 9]
elifは使えない。しかし、if-elseを駆使しすることで複雑なコードを記述することは可能である。
例えばfizzbuzzの場合は以下のように記載できる。
fizzbuzz = ['fizzbuzz' if i % 15 == 0 else 'fizz' if i % 3 == 0 else 'buzz' if i % 5 == 0 else i for i in range(1, 20)]]
# >> [1, 2, 'fizz', 4, 'buzz', 'fizz', 7, 8, 'fizz', 'buzz', 11, 'fizz', 13, 14, 'fizzbuzz', 16, 17, 'fizz', 19]
リスト内包表記の処理時間
1~10,000,000までの偶数を2乗したリストを、for文で作成した時とリスト内包表記で作成したときでは、どの程度時間に差があるのかを比較してみた。
試行回数 | for文 | リスト内包表記 |
---|---|---|
1回目 | 2.989s | 2.354s |
2回目 | 3.191s | 2.455s |
3回目 | 3.120s | 2.371s |
4回目 | 3.219s | 2.434s |
5回目 | 3.134s | 2.387s |
平均 | 3.131s | 2.400s |
速度を意識する場合、リスト内包表記は有用である。
しかし、リスト内包表記を多用しすぎると可読性が落ちることには注意を払う必要がある。
Author And Source
この問題について(python リスト内包表記のメモ), 我々は、より多くの情報をここで見つけました https://qiita.com/Hokuyo/items/29d8255b54751f7ba19b著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .