リスト型の宣言方法
要素を指定してリストを作成する
l = [2,3,4,7,2] print(l) #出力:[2, 3, 4, 7, 2]
要素を入力から受け取りリストを作成する
#例)入力:1 2 3 4 5 l = map(int, input().split()) print(l) #出力:[1, 2, 3 ,4, 5]
要素を入力から受け取りリストを作成する
#例)入力: #1 #2 #3 #4 #5 l = [int(x) for i in range(5)] print(l) #出力:[1, 2, 3 ,4, 5]
リストのリストを作成する
#例)入力: #1 2 3 4 5 #6 7 8 #要素をしてリストを作成する l = [[1,2,3,4,5],[6,7,8]] print(l) #出力: [[1,2,3,4,5],[6,7,8]] #要素を入力から受け取りリストを作成する l =[input().split() for i in range(2)] print(l) #出力:[['1', '2', '3', '4', '5'], ['6', '7', '8']] l =[map(int, input().split()) for i in range(2)] print(l) #出力:[<map object at 0x7fa3602a0250>, <map object at 0x7fa3602a02b0>] l =[list(map(int, input().split())) for i in range(2)] print(l) #出力:[[1, 2, 3, 4, 5], [6, 7, 8]]
リストの要素を取り出す(インデックス指定+スライス機能)
文字列は添字表記(インデックス表記、つまり、ある文字列の何文字目かを指定)することができます。 最初の文字は 0番目 になります。 添字には負の数を指定するこもでき、その場合は右から数えます。ただし、0と-0は等しいので、負の添字は-1から始まることに注意してください。
リスト名[指定する範囲の始めのインデックス:指定する範囲の終わりのインデックス+1]
word = 'Python' print(word[0]) #P print(word[-1]) #n print(word[-2]) #o print(word[0:2]) #Py print(word[:3]) #Pyt print(word[3:]) #hon print(word[4:42]) #on スライスを利用した場合はエラーは発生せず適切に処理されます。 print("length: ", len(word)) #length: 6 word[0] = 'J' #エラー word = 'J' + word[1:]# 1文字目をJにして、以降はword[1:]を使う letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] #['a', 'b', 'c', 'd', 'e', 'f', 'g'] # 2番目から4番目を書き換える letters[2:5] = ['C', 'D', 'E'] #['a', 'b', 'C', 'D', 'E', 'f', 'g'] # 2番目から4番目を削除する letters[2:5] = [] #['a', 'b', 'f', 'g'] # リストの要素を全て削除する(空リストを作る) letters[:] = [] #[] # リストの要素を取り出す(偶数番目の要素) letters[::2]
リストの連結
squares = [1, 4, 9, 16, 25] print(squares + [36, 49, 64, 81, 100]) #[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
リストの追加
末尾に要素を追加する
リストの変数名の後ろに.append(x) と記述することでリストの末尾に新しい要素 x を追加することができます。
行の末尾に追加する
l = [1, 8, 27, 65, 125] add_data = [1, 2, 3] l.append(6 ** 3) l.append(7 ** 3) print(l) #出力:[1, 8, 27, 27, 125, 216, 343] l.append(add_data) print(l) #出力:[1, 8, 27, 65, 125, 216, 343, [1, 2, 3]] l.append([1,2,3]) print(l) #出力:[1, 8, 27, 65, 125, 216, 343, [1, 2, 3], [1, 2, 3]]
列の末尾に追加する
2次元配列などの多次元配列などには、行だけではく、列にも要素を追加したい時があります。
l = [[1, 2, 3], [4, 5, 6, 7], [9, 10]] print(l) # [[1, 2, 3], [4, 5, 6, 7], [9, 10]] add_data1 = 3 add_data2 = ["a", "i", "u", "e", "o"] l[1].append(add_data1) print(l) # [[1, 2, 3], [4, 5, 6, 7, 3], [9, 10]] l[0].append(add_data2) print(l) # [[1, 2, 3, ['a', 'i', 'u', 'e', 'o']], [4, 5, 6, 7, 3], [9, 10]]
指定したところに要素を追加する
リストの変数名.insert(i, x) はインデックス i 番目に要素 x を追加します。
指定した行に追加する
l = [1, 3, 5, 7] print(l) #出力:[1, 3, 5, 7] l.insert(1, 2) # 1番目に2を追加する print(l) #出力:[1, 2, 3, 5, 7] add_data = [1,2,3] l.insert(1,add_data) print(l) #出力:[1, [1, 2, 3], 2, 3, 5, 7] l.insert(1,[5,6]) print(l) #出力:[1, [5, 6], [1, 2, 3], 2, 3, 5, 7]
指定した列に追加する
l = [[1, 2, 3], [4, 5, 6, 7], [9, 10]] print(l) #出力:[[1, 2, 3], [4, 5, 6, 7], [9, 10]] add_data1 = 3 add_data2 = ["a", "i", "u", "e", "o"] l[1].insert(1, add_data1) print(l) #出力:[[1, 2, 3], [4, 3, 5, 6, 7], [9, 10]] l[0].insert(2, add_data2) print(l) #出力:[[1, 2, ['a', 'i', 'u', 'e', 'o'], 3], [4, 3, 5, 6, 7], [9, 10]]
末尾にシーケンス(複数の要素)を追加する
リストの変数名.extend(x)はリストの末尾にシーケンスxを追加します
l = [[1, 2, 3], [4, 5, 6, 7], [9, 10]] add_data = ["a", "i", "u", "e", "o"] l.extend(add_data) print(l) #出力:[[1, 2, 3], [4, 5, 6, 7], [9, 10], 'a', 'i', 'u', 'e', 'o']
リストの置き換え・削除
文字列と違って、リストは要素の変更が可能
l = [1, 8, 27, 65, 125] # 3番目の要素を置き換えたい l[3] = 4 ** 3 # 3番目の要素を4の3乗に置き換える print(l) #出力:[1, 8, 27, 64, 125] a = ["AB", "CD", "EF", "GH"] #リストaの2番目の要素を削除する。削除すると要素数が減る del a[1] print(a) #出力:['AB', 'EF', 'GH'] a.clear() print(a) #出力:[] a = ["AB", "CD", "EF", "GH"] a = [] print(a) #出力:[]
・clear() 全ての要素を削除できる
要素を削除する
リストの変数名.remove(x) はリストの中でxと等しい最初の要素を削除します。
lst = [0, 1, 2, 3, 0, 1, 2, 3] print(lst) # 最初の2を削除する lst.remove(2) print(lst) # もう一度2を削除する lst.remove(2) print(lst) [0, 1, 2, 3, 0, 1, 2, 3] [0, 1, 3, 0, 1, 2, 3] [0, 1, 3, 0, 1, 3]
リストの中に要素が含まれているか確認する
letters = ['a', 'b', 'c', 'd'] print("'a' in letters =", 'a' in letters) print("'y' in letters =", 'y' in letters) print("'z' not in letters =", 'z' not in letters) #'a' in letters = True #'y' in letters = False #'z' not in letters = True
リストの変数名.index(x) は、リスト中で値x を持つ最初の要素のインデックスを返します。
lst = [1, 2, 3, 4, 5]
idx = lst.index(4)
print(idx)
3
リストの要素をソートする
昇順にソートする
リストの変数名.sort() はリスト内の要素をソート(昇順に整列)します。
lst = [1, 0, 3, 2]
print(lst) #出力:[1, 0, 3, 2]
lst.sort()
print(lst) #出力:[0, 1, 2, 3]
降順にソートする
降順ソートする場合は.sort(reverse=True) とします。
lst = [1, 0, 3, 2]
print(lst) #出力:[1, 0, 3, 2]
lst.sort(reverse=True)
print(lst) #出力:[3, 2, 1, 0]
逆順にソートする
リストの変数名.reverse() はリスト内の要素を逆順にします。
lst = [1, 3, 2, 4]
print(lst) #出力:[1, 3, 2, 4]
lst.reverse()
print(lst) #出力:[4, 2, 3, 1]
ソート順をカスタマイズする
a = [ [1, 7, 'z'], [3, 2, 'x'], [1, 8, 'r'], [2, 2, 's'], [1, 9, 'b'], [2, 2, 'a'] ] print(sorted(a, key=lambda x: x[2])) #出力:[[2, 2, 'a'], [1, 9, 'b'], [1, 8, 'r'], [2, 2, 's'], [3, 2, 'x'], [1, 7, 'z']]
ここでは、a[i][2]を文字列順でソートしています
今あるリストをコピーして新しいリストを作成する
リストの変数名.copy() を使って今あるリストをコピーします。
lst1 = [0, 1, 2, 3] lst2 = lst1.copy() # lst1をコピー lst3 = lst1 # lst1, lst2は同じ内容[0, 1, 2, 3]リストだが別のリストを保持している。 print('lst1:', lst1) #出力:lst1: [0, 1, 2, 3] print('lst2:', lst2) #出力:lst2: [0, 1, 2, 3] print('lst3:', lst3) #出力:lst3: [0, 1, 2, 3] # lst2とlst3の最初の要素を-1にする lst2[0] = -1 lst3[0] = -1 print('lst1:', lst1) #出力:lst1: [-1, 1, 2, 3] print('lst2:', lst2) #出力:lst2: [-1, 1, 2, 3] print('lst3:', lst3) #出力:lst3: [-1, 1, 2, 3]
javaや他の言語でもよくあるミス
lst1 = [0, 1, 2, 3] lst2 = lst1 lst2[0] = -1 print('lst1:', lst1) #出力:lst1: [-1, 1, 2, 3] print('lst2:', lst2) #出力:lst2: [-1, 1, 2, 3]
Pythonの代入文=は基本的にコピーを生成しません。 このため lst1 も lst2 も同一のリスト(同じ id を持つ)になっています。javaでも同じことが起きるよ。javaでは、clone()メソッドを使うよ。詳しくは過去記事をご覧ください
実際に同一のリストなのかは lst1 is lst2 で調べることができます。
print("lst1 is lst2=", lst1 is lst2) lst1 is lst2= True

リストの合計値、最大値、最小値、要素数を調べる
a = [1,2,3,4,5,6,7,8,9,10] sum(a) #リストの合計 → 55 max(a) #リストの最大値 → 10 min(a) #リストの最小値 → 1 len(a) #リストの要素数 → 10
・sum() →合計値
・max() →最大値
・min() →最小値
・len() →要素数