#はじめに
pythonには内包表記という形式があるのですが、
一切使わずに今までやってきたのですがパフォーマンスにも関係するし、そろそろきちんと理解しようかと思いまとめようと思いました。
##リストを作る
1~100までの奇数だけのリストを作ります。
内包表記を使わない作り方は以下の通り
list = []
for number in range(1,101):
if number % 2 ==1:
list.append(number)
print(list)
次は内包表記を使って同じことをやってみます。プログラムは以下の通り
list = [number for number in range(1,101) if number %2 ==1]
print(list)
初めのnumberはlistに格納するnumberになります。for のあとのnumberはfor分の一部のnumberです。
##集合を作る
1~99までの奇数だけの集合を作ります。
リストと同じような感じで内包表記でかけます。
list = {number for number in range(1,101) if number %2 ==1}
print(list)
##辞書を作る
同じように辞書も内包表記を使ってかけます。
wordの文字が何回現れたかカウントするプログラムです
word = 'aiueokakiku'
word_count = {x:word.count(x) for x in word}
print(word_count)
##タプルについて
リストと同じように作ってみます。
tuple = (number for number in range(1,101) if number %2 ==1)
print(tuple)
実行すると
<generator object <genexpr> at 0x101435f61>
エラーではないが、()を使ってかくとジェネレータが返ってくる
つまり、タプルには内包表記がないわけです。
##パフォーマンス比較
本当に早いのか試してみます。
まずは、内包表記を使わずに1~10000000までの奇数だけのリストを作ってみます
import time
start = time.time()
list = []
for number in range(1,10000001):
if number % 2 ==1:
list.append(number)
print("実行時間:{0}",time.time() - start)
5回実行した平均は1.71131701469となりました
次に同じこと内包表記でやってみます
import time
start = time.time()
list = [number for number in range(1,10000001) if number %2 ==1]
print("実行時間:{0}",time.time() - start)
5回実行した平均は0.88413858413となりました
##結果
内包表記で書くと早さも約2倍で単純にコード量が減りました。
慣れてくると読みやすくなるらしいので早く慣れるように頑張ろうと思います。