list【リスト型】3.3 / 3.5

リスト表現 リスト内包表記 コンストラクタ メソッド等一覧 共通 シーケンス演算 ミュータブル シーケンス演算 繰り返し処理 ソート アンパック スタック・キュー

メモ


例 (メモ)

# 要素数
lst = [1, 2, 3, 4, 5]
print(len(lst))  # 出力:5
# 重複
lst = [1, 1, 1, 1, 1]
print(len(lst))  # 出力:5

# 入れ子
lst = [1, 2, [31, 32, 33], 4, 5]
print(len(lst))     # 出力:5
print(len(lst[2]))  # 出力:3
# 要素の型
lst = [1, 2.0, "3", True, [1, 2, 3], (1, 2, 3)]
print(len(lst))     # 出力:6
print(len(lst[4]))  # 出力:3
print(len(lst[5]))  # 出力:3

例 (繰り返し処理)

lst = ['a', 'b', 'c']
for item in lst:
    print(item)
# 出力:a
# 出力:b
# 出力:c
lst = ['a', 'b', 'c']
for index, item in enumerate(lst):
    print(index, item)
# 出力:0 a
# 出力:1 b
# 出力:2 c
# zip
lst1 = ['a', 'b', 'c']
lst2 = ['A', 'B', 'C', 'D']
for item1, item2 in zip(lst1, lst2):
    print(item1 + item2)
# 出力:aA
# 出力:bB
# 出力:cC

# zip + リスト内包表記
lst_a = [1, 2, 3, 4]
lst_b = [2, 3, 4, 5]
lst_c = [x + y for x, y in zip(lst_a, lst_b)]
lst_d = [x * y for x, y in zip(lst_a, lst_b)]

print(lst_a)
# 出力:[1, 2, 3, 4]
print(lst_b)
# 出力:[2, 3, 4, 5]
print(lst_c)
# 出力:[3, 5, 7, 9]
print(lst_d)
# 出力:[2, 6, 12, 20]
lst1 = ['a', 'b', 'c']
lst2 = ['A', 'B', 'C', 'D']
len1 = len(lst1)
len2 = len(lst2)
length = max(len1, len2)
for i in range(length):
    if len1 <= i:
        x = "-"
    else:
        x = lst1[i]
    if len2 <= i:
        y = "-"
    else:
        y = lst2[i]
    print(i, x + y)
# 出力:0 aA
# 出力:1 bB
# 出力:2 cC
# 出力:3 -D
lst = ['a', 'b', 'c']
for item in reversed(lst):
    print(item)
# 出力:c
# 出力:b
# 出力:a
lst = ['a', 'c', 'b']
for item in sorted(lst):
    print(item)
# 出力:a
# 出力:b
# 出力:c
lst = ['a', 'c', 'b']
lst.sort()
for item in lst:
    print(item)
# 出力:a
# 出力:b
# 出力:c

例 (アンパック)

lst = [10, 20]

x, y = lst
print(x, y)  # 出力:10 20

#x, = lst       # ValueError 例外
#x, y, z = lst  # ValueError 例外

lst = [1, 2, 3, 4]

*x, y, z = lst
print(x, y, z)  # 出力:[1, 2] 3 4
x, *y, z = lst
print(x, y, z)  # 出力:1 [2, 3] 4
x, y, *z = lst
print(x, y, z)  # 出力:1 2 [3, 4]
*x, y = lst
print(x, y)     # 出力:[1, 2, 3] 4
x, *y = lst
print(x, y)     # 出力:1 [2, 3, 4]
*x, = lst
print(x)        # 出力:[1, 2, 3, 4]
*x1, x2, x3, x4, x5 = lst
print(x1, x2, x3, x4, x5)  # 出力:[] 1 2 3 4

x, y, z, _ = lst
print(x, y, z)  # 出力:1 2 3
x, *_, z = lst
print(x, z)     # 出力:1 4
x, *_ = lst
print(x)        # 出力:1
lst0 = [21, 22, 23]

lst = [1, lst0, 3]
print(lst)  # 出力[1, [21, 22, 23], 3]:
lst = [1, *lst0, 3]
print(lst)  # 出力:[1, 21, 22, 23, 3]

tpl = (1, lst0, 3)
print(tpl)  # 出力:(1, [21, 22, 23], 3)
tpl = (1, *lst0, 3)
print(tpl)  # 出力:(1, 21, 22, 23, 3)
lst = [10, -20, 30]

#print(max(1, lst, 3))  # TypeError 例外
print(max(1, *lst, 3))  # 出力:30

#print(min(1, lst, 3))  # TypeError 例外
print(min(1, *lst, 3))  # # 出力:-20

例 (スタック・キュー)

lst = []

# スタック FILO
lst.append("First")
lst.append("Middle")
lst.append("Last")
print(lst)  # 出力:['First', 'Middle', 'Last']
x = lst.pop()
print(x)    # 出力:Last
x = lst.pop()
print(x)    # 出力:Middle
x = lst.pop()
print(x)    # 出力:First
print(lst)  # 出力:[]

# キュー FIFO (1/2)
lst.append("First")
lst.append("Middle")
lst.append("Last")
print(lst)  # 出力:['First', 'Middle', 'Last']
x = lst.pop(0)
print(x)    # 出力:First
x = lst.pop(0)
print(x)    # 出力:Middle
x = lst.pop(0)
print(x)    # 出力:Last
print(lst)  # 出力:[]

# キュー FIFO (2/2)
lst.insert(0, "First")
lst.insert(0, "Middle")
lst.insert(0, "Last")
print(lst)  # 出力:['Last', 'Middle', 'First']
x = lst.pop()
print(x)    # 出力:First
x = lst.pop()
print(x)    # 出力:Middle
x = lst.pop()
print(x)    # 出力:Last
print(lst)  # 出力:[]

例 (共通 シーケンス演算)

lst = [1, 2, 3]

# x in list
print(1 in lst)  # 出力:True
print(4 in lst)  # 出力:False

# x not in list
print(1 not in lst)  # 出力:False
print(4 not in lst)  # 出力:True
# list1 + list2
lst1 = [1, 2, 3]
lst2 = [4, 5, 6]
lst3 = lst1 + lst2
print(lst3)       # 出力:[1, 2, 3, 4, 5, 6]
print(lst1 + [])  # 出力:[1, 2, 3]
print([] + lst1)  # 出力:[1, 2, 3]
# list*n
# n*list
lst = [1, 2, 3]
lst1 = lst * 3
print(lst1)  # 出力:[1, 2, 3, 1, 2, 3, 1, 2, 3]

lst2 = 3 * lst
print(lst2)  # 出力:[1, 2, 3, 1, 2, 3, 1, 2, 3]

lst3 = lst * (-3)
print(lst3)  # 出力:[]

lst4 = [[]] * 3
print(lst4)  # 出力:[[], [], []]
lst4[0].append(9)
print(lst4)  # 出力:[[9], [9], [9]]

lst = [[1]]
lst5 = lst * 3
print(lst5)  # 出力:[[1], [1], [1]]
lst5[0].insert(0, -9)
lst[0].append(9)
print(lst5)  # 出力:[[-9, 1, 9], [-9, 1, 9], [-9, 1, 9]]
print(lst)   # 出力:[[-9, 1, 9]]
# list[i]
lst = [0, 1, 2, 3, 4, 5, 6]
print(lst[3])   # 出力:3
print(lst[-2])  # 出力:5
#print(lst[99])  # IndexError 例外
#print(lst[-99]) # IndexError 例外
# list[i:j]
lst = [0, 1, 2, 3, 4, 5, 6]
print(lst[2:4])    # 出力:[2, 3]
print(lst[2:-3])   # 出力:[2, 3]
print(lst[-5:-3])  # 出力:[2, 3]
print(lst[:4])     # 出力:[0, 1, 2, 3]
print(lst[2:])     # 出力:[2, 3, 4, 5, 6]
print(lst[:])      # 出力:[0, 1, 2, 3, 4, 5, 6]
print(lst[-99:4])  # 出力:[0, 1, 2, 3]
print(lst[2:99])   # 出力:[2, 3, 4, 5, 6]
print(lst[-99:99]) # 出力:[0, 1, 2, 3, 4, 5, 6]
# list[i:j:k]
lst = [0, 1, 2, 3, 4, 5, 6]
print(lst[1:6:2])    # 出力:[1, 3, 5]
print(lst[1:-1:2])   # 出力:[1, 3, 5]
print(lst[-6:-1:2])  # 出力:[1, 3, 5]
print(lst[-99:99:2]) # 出力:[0, 2, 4, 6]
print(lst[5:1:-2])   # 出力:[5, 3]
print(lst[-2:1:-2])  # 出力:[5, 3]
print(lst[-2:-6:-2]) # 出力:[5, 3]
print(lst[1:5:-2])   # 出力:[]
#print(lst[5:1:0])    # ValueError 例外
print(lst[:6:2])  # 出力:[0, 2, 4]
print(lst[1::2])  # 出力:[1, 3, 5]
print(lst[1:6:])  # 出力:[1, 2, 3, 4, 5]
print(lst[::2])   # 出力:[0, 2, 4, 6]
print(lst[1::])   # 出力:[1, 2, 3, 4, 5, 6]
print(lst[::])    # 出力:[0, 1, 2, 3, 4, 5, 6]
# len(list)
lst = [1, 2, 3, 4]
print(len(lst))  # 出力:4
print(len([]))   # 出力:0
lst = [1, -2, 3, -4]

# min(list)
print(min(lst))  # 出力:-4
# max(list)
print(max(lst))  # 出力:3
# list.index(x[,i[,j]])
lst = [0, 1, 2, 3, 4, 3, 2, 1, 0]
print(lst.index(1))
# 出力:1
print(lst.index(1, 2))
# 出力:7
print(lst.index(1, 2, 8))
# 出力:7
#print(lst.index(1, 2, 7))  # ValueError 例外
print(lst.index(1, -99))
# 出力:1
print(lst.index(1, 2, 99))
# 出力:7
print(lst.index(1, -99, 99))
# 出力:1
# list.count(x)
lst = [1, 2, 3, 2, 1]
print(lst.count(1))  # 出力:2
print(lst.count(3))  # 出力:1
print(lst.count(0))  # 出力:0

例 (ミュータブル シーケンス演算)

# list[i] = x
lst = [0, 1, 2, 3]
lst[2] = 10
print(lst)  # 出力:[0, 1, 10, 3]
lst[-1] = 100
print(lst)  # 出力:[0, 1, 10, 100]
#lst[99] = 100   # IndexError 例外
#lst[-99] = 100  # IndexError 例外
# list[i:j] = iterable
lst = [0, 1, 2, 3, 4, 5, 6]
lst[1:6] = [100, 200]
print(lst)  # 出力:[0, 100, 200, 6]

lst = [0, 1, 2, 3, 4]
lst[2:4] = [201, 301]
print(lst)  # 出力:[0, 1, 201, 301, 4]
lst[-3:4] = [202, 302]
print(lst)  # 出力:[0, 1, 202, 302, 4]
lst[2:-1] = [203, 303]
print(lst)  # 出力:[0, 1, 203, 303, 4]
lst[-3:-1] = [204, 304]
print(lst)  # 出力:[0, 1, 204, 304, 4]

lst = [0, 1, 2, 3, 4, 5, 6]
lst[:5] = [101, 201]
print(lst)  # 出力:[101, 201, 5, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
lst[2:] = [102, 202]
print(lst)  # 出力:[0, 1, 102, 202]
lst = [0, 1, 2, 3, 4, 5, 6]
lst[-99:5] = [103, 203]
print(lst)  # 出力:[103, 203, 5, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
lst[2:99] = [104, 204]
print(lst)  # 出力:[0, 1, 104, 204]
# del list[i:j]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[2:5]
print(lst)  # 出力:[0, 1, 5, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[:5]
print(lst)  # 出力:[5, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[2:]
print(lst)  # 出力:[0, 1]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[:]
print(lst)  # 出力:[]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[-99:5]
print(lst)  # 出力:[5, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[2:99]
print(lst)  # 出力:[0, 1]
# list[i:j:k] = iterable
lst = [0, 1, 2, 3, 4, 5, 6]
lst[1:6:2] = [100, 300, 500]
print(lst)  # 出力:[0, 100, 2, 300, 4, 500, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
lst[-7:-2:2] = [100, 300, 500]
print(lst)  # 出力:[100, 1, 300, 3, 500, 5, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
lst[6:1:-2] = [100, 300, 500]
print(lst)  # 出力:[0, 1, 500, 3, 300, 5, 100]
#lst[1:6:2] = [100, 300]            # ValueError 例外
#lst[1:6:2] = [100, 300, 500, 700]  # ValueError 例外
#lst[1:6:0] = [100, 300, 500]       # ValueError 例外

lst = [0, 1, 2, 3, 4, 5, 6]
lst[:5:2] = [100, 300, 500]
print(lst)  # 出力:[100, 1, 300, 3, 500, 5, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
lst[2::2] = [100, 300, 500]
print(lst)  # 出力:[0, 1, 100, 3, 300, 5, 500]
lst = [0, 1, 2, 3, 4, 5, 6]
lst[1:4:] = [100, 300, 500]
print(lst)  # 出力:[0, 100, 300, 500, 4, 5, 6]
lst = [0, 1, 2]
lst[::] = [100, 200, 300]
print(lst)  # 出力:[100, 200, 300]

lst = [0, 1, 2, 3, 4]
lst[-99:99:2] = [100, 300, 500]
print(lst)  # 出力:[100, 1, 300, 3, 500]
# del list[i:j:k]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[1:5:2]
print(lst)  # 出力:[0, 2, 4, 5, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[-5:5:2]
print(lst)  # 出力:[0, 1, 3, 5, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[-5:-1:2]
print(lst)  # 出力:[0, 1, 3, 5, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[6:1:-2]
print(lst)  # 出力:[0, 1, 3, 5]
lst = [0, 1, 2, 3, 4, 5, 6]
#del lst[1:5:0]  # ValueError 例外

lst = [0, 1, 2, 3, 4, 5, 6]
del lst[:5:2]
print(lst)  # 出力:[1, 3, 5, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[1::2]
print(lst)  # 出力:[0, 2, 4, 6]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[::2]
print(lst)  # 出力:[1, 3, 5]
lst = [0, 1, 2, 3, 4, 5, 6]
del lst[::]
print(lst)  # 出力:[]

lst = [0, 1, 2, 3, 4, 5, 6]
del lst[-99:99:2]
print(lst)  # 出力:[1, 3, 5]
# list.append(x)
lst = [0, 1, 2, 3]
lst.append(99)
print(lst)  # 出力:[0, 1, 2, 3, 99]
# list.clear()
lst = [0, 1, 2, 3]
lst.clear()
print(lst)  # 出力:[]
lst.clear()
print(lst)  # 出力:[]
# list.copy()
lst0 = [0, 1, 2, 3]
lst1 = lst0.copy()
print(lst1)  # 出力:[0, 1, 2, 3]
lst1[0] = 99
print(lst1)  # 出力:[99, 1, 2, 3]
print(lst0)  # 出力:[0, 1, 2, 3]

lst2 = [11, 12]
lst0 = [0, lst2, 3]
lst3 = lst0.copy()
print(lst3)  # 出力:[0, [11, 12], 3]
lst2[0] = 99
print(lst3)  # 出力:[0, [99, 12], 3]
print(lst0)  # 出力:[0, [99, 12], 3]
# list.extend(iterable)
lst = [0, 1]
lst.extend([200, 300])
print(lst)  # 出力:[0, 1, 200, 300]

# list += iterable
lst += [400, 500]
print(lst)  # 出力:[0, 1, 200, 300, 400, 500]
# list *= n
lst = [0, 1, 2, 3]
lst *= 2
print(lst)   # 出力:[0, 1, 2, 3, 0, 1, 2, 3]

lst1 = [11, 12]
lst = [0, lst1, 2]
lst *= 2
print(lst)   # 出力:[0, [11, 12], 2, 0, [11, 12], 2]
lst[1].append(99)
print(lst)   # 出力:[0, [11, 12, 99], 2, 0, [11, 12, 99], 2]
print(lst1)  # 出力:[11, 12, 99]

lst = [[]]
lst *= 3
lst[0].append(99)
print(lst)   # 出力:[[99], [99], [99]]
# list.insert(i, x)
lst = [0, 1]
lst.insert(1, 9)
print(lst)  # 出力:[0, 9, 1]
lst.insert(0, [100, 200])
print(lst)  # 出力:[[100, 200], 0, 9, 1]
lst.insert(-99, -99)
print(lst)  # 出力:[-99, [100, 200], 0, 9, 1]
lst.insert(99, 99)
print(lst)  # 出力:[-99, [100, 200], 0, 9, 1, 99]
# list.pop([i])
lst = [0, 1, 2, 3]
x = lst.pop()
print(x)    # 出力:3
print(lst)  # 出力:[0, 1, 2]
x = lst.pop(1)
print(x)    # 出力:1
print(lst)  # 出力:[0, 2]
x = lst.pop(-1)
print(x)    # 出力:2
print(lst)  # 出力:[0]

#x = lst.pop(-99)  # IndexError 例外
#x = lst.pop(99)   # IndexError 例外

x = lst.pop()
print(x)    # 出力:0
print(lst)  # 出力:[]
#x = lst.pop()     # IndexError 例外
# list.remove( x )
lst = [0, 1, 2, 3, 2, 1, 0]
lst.remove(2)
print(lst)  # 出力:[0, 1, 3, 2, 1, 0]

#lst.remove(4)  # ValueError 例外
# list.reverse()
lst = [0, 1, 2, 3]
lst.reverse()
print(lst)  # 出力:[3, 2, 1, 0]

lst = []
lst.reverse()
print(lst)  # 出力:[]

リスト表現・リスト内包表記・コンストラクタ

構文

[[item1[, ...[, itemN]]][,]]
[x1 for x2 in iterable]リスト内包表記class list([iterable])

itemN要素項目
x1設定要素
x2iterableから取得した要素変数
iterable元になるイテラブルオブジェクト (シーケンス・イテレートサポートのコンテナ・イテレータオブジェクト)
リスト内包表記では、後ろに if 等でフィルタリング可能
※:リスト表現の末尾カンマは無視 (空要素にはならない)

# リスト表現
lst = []
print(lst)
# 出力:[]
lst = [1, 2, 3]
print(lst)
# 出力:[1, 2, 3]
lst = [1, [21, 22], [31, [321, 322]]]
print(lst)
# 出力:[1, [21, 22], [31, [321, 322]]]
lst = [1, '2', 3.0]
print(lst)
# 出力:[1, '2', 3.0]
# リスト内包表記
lst = [x for x in range(5)]
print(lst)
# 出力:[0, 1, 2, 3, 4]
lst = [x * 3 for x in range(5)]
print(lst)
# 出力:[0, 3, 6, 9, 12]
lst = [x for x in range(10) if x % 2 == 0]
print(lst)
# 出力:[0, 2, 4, 6, 8]
lst = [x * 3 for x in range(10) if x % 2 == 0]
print(lst)
# 出力:[0, 6, 12, 18, 24]
# コンストラクタ
lst = list()
print(lst)
# 出力:[]
lst = list([1, 3, 5])
print(lst)
# 出力:[1, 3, 5]
lst = list((2, 4, 6))
print(lst)
# 出力:[2, 4, 6]
lst = list("abc")
print(lst)
# 出力:['a', 'b', 'c']

sort()【ソート】

メモ

構文

list.sort(*, key=None, reverse=False)

戻り値なし (リスト自体を変更)
key (キーワード引数)ソート関数 (詳細は下記参照)
reverse (キーワード引数)反転の有無 (True:反転あり / False:反転なし)

※ 構文の * は、位置引数(未使用)とキーワード引数の区切り (def【関数定義】 参照)
ソート関数 引数 (例)備考
item要素値
戻り値備考
比較キー< で比較

lst = [2, 3, 1]
lst.sort()
print(lst)
# 出力:[1, 2, 3]

lst = [2, 3, 1]
lst.sort(reverse=True)
print(lst)
# 出力:[3, 2, 1]

lst = ['B', 'a', 'C']
lst.sort()
print(lst)
# 出力:['B', 'C', 'a']

lst = ['B', 'a', 'C']
lst.sort(key=str.lower)
print(lst)
# 出力:['a', 'B', 'C']
# 絶対値でソート
def funcSort(item):
    return abs(item)


lst = [2, -3, 1]
lst.sort()
print(lst)
# 出力:[-3, 1, 2]

lst = [2, -3, 1]
lst.sort(key=funcSort)
print(lst)
# 出力:[1, 2, -3]

lst = [2, -3, 1]
lst.sort(key=funcSort, reverse=True)
print(lst)
# 出力:[-3, 2, 1]