【Python】リスト内包表記のいろいろ
リスト内包表記について、書き方を忘れそうなので記録しておきます。
シンプルリスト
[0, 1, 2, 3] のシンプルなリストを作成します。
inner1 はリスト内包表記。
init1 はリスト内包表記を使わずにリストを初期化したものです。
list1 は初期化リストを使って初期化。
どれも同じリストを作成します。
########################################
# the inner list comprehension
########################################
# [0, 1, 2, 3]
########################################
def inner1():
a = [i for i in range(0, 4)]
return a
#------------------------------------
def init1():
a = []
for i in range(0, 4):
a += [i]
return a
#------------------------------------
def list1():
a = [0, 1, 2, 3]
return a
#------------------------------------
print()
print('a_inner1')
a_inner1 = inner1()
print(a_inner1)
print()
print('a_init1')
a_init1 = init1()
print(a_init1)
print()
print('a_list1')
a_list1 = list1()
print(a_list1)
if a_init1 == a_inner1:
print('OK')
if a_list1 == a_inner1:
print('OK')
2次元タプルのリスト
(0, 10) ~ (3, 14) までの2次元のタプルを要素に持つリストです。
inner2 はリスト内包表記。
init2 はリスト内包表記を使わずに初期化。
########################################
# [
# (0, 10), (0, 11), (0, 12), (0, 13), (0, 14),
# (1, 10), (1, 11), (1, 12), (1, 13), (1, 14),
# (2, 10), (2, 11), (2, 12), (2, 13), (2, 14),
# (3, 10), (3, 11), (3, 12), (3, 13), (3, 14)
# ]
########################################
def inner2():
m = [(row, col)
for row in range(0, 4)
for col in range(10, 15)
]
return m
#------------------------------------
def init2():
m = []
for row in range(0, 4):
for col in range(10, 15):
m = m + [(row, col)]
return m
#------------------------------------
print()
print('a_inner2')
a_inner2 = inner2()
print(a_inner2)
print()
print('a_init2')
a_init2 = init2()
print(a_init2)
if a_inner2 == a_init2:
print('OK')
else:
print('NG')
条件付きリスト
上記の2次元タプルリストに条件を加えたものです。
(0, 10) ~ (3, 14) までの全てのタプルをリストに追加するのではなく、row が偶数で、col が奇数のタプルだけをリストに追加します。
inner3 はリスト内包表記。
init3 はリスト内包表記を使わずに初期化。
########################################
# [(0, 11), (0, 13), (2, 11), (2, 13)]
########################################
def inner3():
a = [(row, col)
for row in range(0, 4)
for col in range(10, 15)
if ((row % 2) == 0) and ((col % 2) != 0)
]
return a
#------------------------------------
def init3():
b = []
for row in range(0, 4):
for col in range(10, 15):
if ((row % 2) == 0) and ((col % 2) != 0):
b = b + [(row, col)]
return b
#------------------------------------
print()
print('a_inner3')
a_inner3 = inner3()
print(a_inner3)
print()
print('a_init3')
a_init3 = init3()
print(a_init3)
if a_inner3 == a_init3:
print('OK')
else:
print('NG')
3次元リスト
2次元リスト [0, 10] ~ [3, 14] を、更に2次元のリストにします。
[[0, 10] ~ [3, 14]]
[[1, 10] ~ [1, 14]]
[[2, 10] ~ [2, 14]]
[[3, 10] ~ [3, 14]]
inner4 はリスト内包表記。
init4 はリスト内包表記を使わずに初期化。
########################################
# [
# [[0, 10], [0, 11], [0, 12], [0, 13], [0, 14]],
# [[1, 10], [1, 11], [1, 12], [1, 13], [1, 14]],
# [[2, 10], [2, 11], [2, 12], [2, 13], [2, 14]],
# [[3, 10], [3, 11], [3, 12], [3, 13], [3, 14]]
# ]
########################################
def inner4():
m = [[[row, col]
for col in range(10, 15)]
for row in range(0, 4)
]
return m
#------------------------------------
def init4():
m = []
for row in range(0, 4):
m_row = []
for col in range(10, 15):
m_row.append([row, col])
m.append(m_row)
return m
#------------------------------------
print()
print('a_inner4')
a_inner4 = inner4()
print(a_inner4)
print()
print('a_init4')
a_init4 = init4()
print(a_init4)
if a_inner4 == a_init4:
print('OK')
else:
print('NG')
この記事が気に入ったらサポートをしてみませんか?