statepipyの日記

興味のある分野(統計、疫学、機械学習、品質管理、手料理)と、PCスキルの維持を目的に書き続けます!

リストとリスト内包表記

リスト内包表記を用いれば、シンプルな記載となり、行数も削減できる!

# リスト
list = []       #空のリスト作成
for i in range(10):
    list.append(i)      #appendで空のリストに追加
print(list)
# リスト内包表記
list = [i for i in range(10)]
print(list)

何れも出力結果は以下のようになる。

#出力結果
list =  [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]


それでは2次元リストの場合はどのようになるだろうか?

# 2次元リスト
vector = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(vector[0])

# 出力
[1, 2, 3]


最初のリスト[1, 2, 3]が取り出された!
それでは、さらに詳細に指定したらどのようになるだろうか?

# 2次元リスト
vector = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(vector[0][1])

# 出力
[2]

最初のリストの2番目[2]が取り出された!


それではリスト内包表記であったらはどのようになるだろうか?

# 2次元リスト
vector = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
first = [v[0] for v in vector] 
print(first)
# 出力
[1, 4, 7]

各リストの最初の数字が取りさだれた!

# 2次元リストとリスト内包表記
vector = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
first = [v[1] for v in vector] 
print(first)
# 出力
[2, 5, 8]

各リストの2番目の数字が取りさだれた!
この違い、最初は良く分からなかった・・・

# 2次元リストとリスト内包表記
vector = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new = [v[1:] for v in vector[:]
print(new)  

各リストの2番目以降[1:] が取り出される。

# 出力
[2, 3], [5, 6], [8,9]

この場合はどのようになるだろうか?

# 2次元リストとリスト内包表記
vector = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new = [v[1:] for v in vector[:-1]
print(new)  

各リストの2番目以降[1:]と、リストの最後以外[:-1] が取り出される。

# 出力
[2, 3], [5, 6]