見出し画像

【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')


この記事が気に入ったらサポートをしてみませんか?