set型・リスト内包表記

2.4. set型・リスト内包表記#

2.4.1. set型#

リストから重複を取り除くためにset型(重複を許さない)を使うことができます。

u = [0, 0, 0, 1, 1, 3, 4, 10, 10]
set(u)
{0, 1, 3, 4, 10}
list(set(u)) #セット型からリスト型に戻します
[0, 1, 3, 4, 10]

2.4.2. リスト内包表記 (List comprehension)#

forループを各代わりにリスト内包表記(list comprehension)を使うことができます。処理速度が速くなる場合が多いです。

forループで以下のようなコードを実行しましょう。

%%time 
original = range(100000)
double = []

for i in original:
    result = i * 2
    double.append(result) #appendはリストに要素を追加します

print(len(double))
100000
CPU times: user 5.63 ms, sys: 427 µs, total: 6.05 ms
Wall time: 6.05 ms

Note

%%timeはJupyter Notebookのマジックコマンドと呼ばれるもののひとつです。cellの処理時間を計測することができます。 また、%timeとすると、その行の処理時間を計測できます。

%lsmagicで使用できるマジックコマンドの一覧を確認できます。 詳細はIPythonのドキュメントをご確認ください。

上のcellを実行するのにかかった時間が表示されるはずです。

次に上のcellと同じ処理をリスト内包表記で書いてみましょう。

%%time
double = [i * 2 for i in original]
print(len(double))
100000
CPU times: user 2.33 ms, sys: 328 µs, total: 2.66 ms
Wall time: 2.67 ms

実行する環境によって異なりますが、場合によってはリスト内包表記の方が実行時間が短くなっているかもしれません。