【Python初心者】リスト【リスキリング】

Programming
スポンサーリンク

 

Pythonを勉強するために本を買ったけど,積読してる.
最初の方の数値や算術演算,文字列の扱いで止まっている.
リストの操作は似たようのものがたくさんあり,関数やメソッドがたくさん出てきてよく分からなくなった.
操作のまとめ表みたいなものがあるとわかりやすいのに.

 そんな方が,リストを理解して,タプルや辞書の学習に進むための記事です.
 

本記事の内容

 
  これまでの記事で,整数,浮動小数点数,複素数,文字列という個別のデータ型を学んできましたね.Pythonでは,このような個々のデータをひとまとめにして扱うことができる,複合データ型を備えています.本記事から数記事に渡り,複合データ型を解説していきます.今回は,「リスト」です.まずはリストの作成とデータ(個々の要素)の取得方法を,その後要素の変更方法などを解説します.これまでの記事と同様に,コードを打ちながら学んで行きましょう.余力のある方は,部分的にコードを変更して実験してみましょう.
 

 

Pythonの文法基礎から実務的な分析・機械学習まで学べるオンライン学習サービス(1週間無料です)

 

 

スポンサーリンク

リストとは|作成方法

 複合データ型を,表1にまとめます.その1つがリストです.リストは,複数のデータに順番をつけて,ひとまとめにしたデータです.リストは、その要素を追加したり、置き換えたり、変更可能(ミュータブル)なデータ型です.
 

表1.複合データ型

型(クラス) ミュータブル※1 シーケンス型※2
リスト(list)
タプル(tuple) ×
辞書(dict) ×
集合(set) ×

※1: ミュータブル:同じオブジェクトで中の値を書き換え可能.
※2: シーケンス型:順序を持つ.
 
 リストを使う場面としては,データ解析です.まずは,リストの作成方法を学びながら,実行結果がどのように表示されるかをみてみましょう.同時に,入力ルールの理解を深めましょう.
 

 

リストの作成

 0個以上の要素(リスト内のオブジェクト)をカンマで区切り,[ ](角括弧)で囲んで記述します.いくらでも要素を増やすことができ,長いデータになることもあります.そのような場合,変数に代入することによって,短いコードで表現できます.

リスト名 = [要素1, 要素2, 要素3・・・]

 1つ目の例以外は,変数に代入した形で示します.数字や調味料のデータがあると考えてください.
 

0個以上の要素をカンマで区切り,角括弧で囲んで記述する.

[-3, -2, 1, 0, 1, 2, 3]
[-3, -2, 1, 0, 1, 2, 3]

 

["さとう", "しお", "す", "せうゆ", "みそ"]
[‘さとう’, ‘しお’, ‘す’, ‘せうゆ’, ‘みそ’]

 

["砂糖", "塩", "酢", "醤油", "味噌"]
[‘砂糖’, ‘塩’, ‘酢’, ‘醤油’, ‘味噌’]

 

変数に代入できる

list_ex1 = [-3, -2, 1, 0, 1, 2, 3]
list_ex1
[-3, -2, 1, 0, 1, 2, 3]

 

list_ex2 = ["砂糖", "塩", "酢", "醤油", "味噌"]
list_ex2
[‘砂糖’, ‘塩’, ‘酢’, ‘醤油’, ‘味噌’]

 

異なる型が混在しても良い.

list_ex3 = [3, "砂糖", "塩", "酢", "醤油", "味噌", 6.02e23]
list_ex3
[3, ‘砂糖’, ‘塩’, ‘酢’, ‘醤油’, ‘味噌’, 6.02e+23]

 

同じ要素を含んでも良い.

list_ex4 = [3, "砂糖", "塩", "酢", "醤油", "味噌", 6.02e23, 3, "塩"]
list_ex4
[3, ‘砂糖’, ‘塩’, ‘酢’, ‘醤油’, ‘味噌’, 6.02e+23, 3, ‘塩’]

 

リストを入れ子できる.

list_ex5 = [3, ["砂糖", "酒", "みりん"], "塩", "酢", "醤油", "味噌", 6.02e+23]
list_ex5
[3, [‘砂糖’, ‘酒’, ‘みりん’], ‘塩’, ‘酢’, ‘醤油’, ‘味噌’, 6.02e+23]

 

変数をリストに入れることもできる.

list_ex6 = ["砂糖", "酒", "みりん"]
list_ex7 = [3, list_ex6, "塩", "酢", "醤油", "味噌", 6.02e+23]
list_ex7
[3, [‘砂糖’, ‘酒’, ‘みりん’], ‘塩’, ‘酢’, ‘醤油’, ‘味噌’, 6.02e+23]

 

何も記述しない場合,空リストとなる.

list_empty = []
list_empty
[]

 

まとめ

  • 0個以上の要素をカンマで区切り,角括弧で囲んで記述する.
  • 変数に代入できる.
  • 異なる型が混在しても良い.
  • 同じ要素を含んでも良い.
  • リストを入れ子できる.
  • 変数をリストに入れることもできる.
  • 何も記述しない場合,空リストとなる.

 

 

型の確認

 type()関数を使って確認します.「list」と表示されるか確認してみましょう.前述のリストはすべてリストです.

type(list_ex3)
list

 

 

文字列から変換

 文字列もシーケンスでした.従って,文字列を1文字ずつ分割して,リストに変換できます.

list("リストにするで!")
[‘リ’, ‘ス’, ‘ト’, ‘に’, ‘す’, ‘る’, ‘で’, ‘!’]

 

list("I'll be there ")
[‘I’, “‘”, ‘l’, ‘l’, ‘ ‘, ‘b’, ‘e’, ‘ ‘, ‘t’, ‘h’, ‘e’, ‘r’, ‘e’, ‘ ‘]

 

 

リストとインデックス—要素の取得

 文字列と同様に,「インデックス」を用いて,要素を指定することができます.インデックスを指定するには,角カッコ(ブラケット)[ ] の中にオフセットを添えましたね.

【Python初心者】文字列とエスケープシーケンス【リスキリング】
Pythonの文字列の扱いについて解説します。ぜひ記事を読みながら、コードを書き、打ちこんだコード通りに、結果が出力されるのを体感してください。Pythonを学びたい方、学び直したい方は、ぜひご一読ください。

 list_ex2を例にすると,表のように,先頭の文字のオフセットを0,その次を1・・・または末尾の文字のオフセットを-1,その次を−2・・・として,指定することができます.

list_ex2の要素 “砂糖” “塩” “酢” “醤油” “味噌”
オフセット(先頭から) 0 1 2 3 4
オフセット(末尾から) -5 -4 -3 -2 -1

 

 前述のように,リスト名を実行して全要素を取得する方法がありました.ここでは,インデックスを使用して要素の一部を取得するしてみましょう.
 

 

要素の抽出

 文字列と同様に,リストから1つの要素をを取り出すには,リストの後ろに角カッコ(ブラケット)[ ]を付して,その中に取り出したい要素のオフセットを入力してインデックスします.
 

["砂糖", "塩", "酢", "醤油", "味噌"][1]
‘塩’

 

list_ex2[1]
‘塩’

 

list_ex2[-2]
‘醤油’

 

 

リストのスライス

 文字列のスライスと同様に,リスト内の要素の一部を取り出すには,その取り出し方によって,—インデックスを使った—いくつかの方法があります.角カッコに,開始するオフセット(開始値),停止するオフセット(停止値)などを指定する方法です.
 停止値は,取り出したい文字列のオフセットに+1加えたオフセットを指定します.オフセットと要素の関係をわかりやすくするために,0~8の整数のリストをlist_numに代入して,練習してみましょう.
 

list_num = [0, 1, 2, 3, 4, 5, 6, 7, 8]

 

[:] → リスト内の全要素

list_num[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8]

 

[開始値:] → 指定した開始値から末尾までの要素

list_num[5:]
[5, 6, 7, 8]

 

list_num[-4:]
[5, 6, 7, 8]

 

[:停止値] → 先頭([0])から指定した停止値の1つ手前までの要素

list_num[:7]
[0, 1, 2, 3, 4, 5, 6]

 

list_num[:-2]
[0, 1, 2, 3, 4, 5, 6]

 

[開始値:停止値] → 指定した開始値から停止値の1つ手前までの要素

list_num[5:9]
[5, 6, 7, 8]

 

list_num[-4:9]
[5, 6, 7, 8]

 

[開始値:停止値:間隔] → 指定した開始値から停止値の1つ手前まで,指定した間隔ごとの要素

list_num[0:6:2] 
[0, 2, 4]

 

[::間隔] → 間隔のみを指定すると,0から順番に間隔ごとに出力

list_num[::-1] # 逆順になります.
[8, 7, 6, 5, 4, 3, 2, 1, 0]

 

 

スポンサーリンク

リストの操作

 
表2.リストの操作一覧

操作 関数・メソッド 演算子ほか インデックス
連結 .extend() +, +=
追加 .append(), .insert() *
置換
削除 .clear(), .pop(), remove() del文
並べ替え sorted(), .sort(), .reverse()
検索取得 .index(), count(), len() in

 

 

リストの連結

.extend()メソッド → 末尾に別のリストを連結する.

prime1 = [2, 3, 5, 7, 11]
prime2 = [13, 17, 19, 23]
prime1.extend(prime2) # prime1の末尾に,prime2が連結する.
prime1
[2, 3, 5, 7, 11, 13, 17, 19, 23]

 

+演算子

prime1 = [2, 3, 5, 7, 11]
prime2 = [13, 17, 19, 23]
prime1 + prime2 # prime1 + prime2を出力.
[2, 3, 5, 7, 11, 13, 17, 19, 23]

 

+=演算子

prime1 = [2, 3, 5, 7, 11]
prime2 = [13, 17, 19, 23]
prime1 += prime2 # 代入演算子を用いて,prime1 = prime1 + prime2とすることもできる.
prime1 # prime1を出力
[2, 3, 5, 7, 11, 13, 17, 19, 23]

 

 

要素の追加

.append()メソッド → リストの末尾に要素を追加する.

prime1 = [2, 3, 5, 7, 11]
prime1.append(13)
prime1
[2, 3, 5, 7, 11, 13]

 

prime1.append(11) # 11を追加したprime1にさらに13を追加
prime1 # prime1を出力.同じ値を複数追加できる.
[2, 3, 5, 7, 11, 13, 11]

 

prime1 = [2, 3, 5, 7, 11]
prime2 = [13, 17, 19, 23]
prime1.append(prime2) # prime1の末尾に,prime2が追加される.連結ではなく,リストが入れ子なる.
prime1 # prime1を出力
[2, 3, 5, 7, 11, [13, 17, 19, 23]]

 

.insert()メソッド → 追加したい位置を指定して追加する.

fibo1 = [0, 1, 1, 2, 3, 5, 8]
fibo2 = "golden ratio"
# リスト.insert(追加したい位置のオフセット, 追加したい要素)
fibo1.insert(1, fibo2) # インデックス値が1,すなわち初めの0の次に入る.
fibo1
[0, ‘golden ratio’, 1, 1, 2, 3, 5, 8]

 

*演算子

fibo1 *= 2 # 代入演算子を用いて,fibo1 = fibo1*2とすることもできる.
fibo1
[0, ‘golden ratio’, 1, 1, 2, 3, 5, 8, 0, ‘golden ratio’, 1, 1, 2, 3, 5, 8]

 

 

要素の置換

 要素を他の値に置き換えることができます.インデックスを使い,次のように,置換したい位置を指定する方法です.
 

リスト[置換したい位置のオフセット]

seasoning = ["砂糖", "塩", "酢", "醤油", "味噌"]
seasoning[0] = "sugar"
seasoning
[‘sugar’, ‘塩’, ‘酢’, ‘醤油’, ‘味噌’]

 

 

要素の削除

.clear()メソッド → 全ての要素を削除する.

unneed = ["hard working", "deadline", "tax"]
unneed.clear()
unneed
[]

 

.pop()メソッド → オフセットを指定して削除する.

life = ["family", "health", "hobby",  "money", "work"]
life.pop(4) # オフセット4 すなわち"work"が指定される.
life # "work"を取り出して削除したlifeを出力する.
[‘family’, ‘health’, ‘hobby’, ‘money’]

 

life = ["family", "health", "hobby",  "money", "work"]
life.pop() # オフセットを指定しなければ,[-1],すなわち末尾の要素が指定される.
life # "work"を取り出して削除したlifeを出力する.
[‘family’, ‘health’, ‘hobby’, ‘money’]

 

.remove()メソッド → 要素の値を指定して削除する.

life = ["family", "health", "hobby",  "money", "work"]
life.remove("work") 
life
[‘family’, ‘health’, ‘hobby’, ‘money’]

 

del文

life = ["family", "health", "hobby",  "money", "work"]
del life[4]
life
[‘family’, ‘health’, ‘hobby’, ‘money’]

 

 

要素の並べ替え

sorted()関数 → 元のリストを変更せず,ソートされた新しいリストを作成する.

mathematics1 = ["integral", "pi", "Euler's number", "imaginary unit"]
sorted(mathematics1) # アルファベット順となる.
[“Euler’s number”, ‘imaginary unit’, ‘integral’, ‘pi’]

 

mathematics1 # 元のリストを出力すると,変更されないことを確認できる.
[‘integral’, ‘pi’, “Euler’s number”, ‘imaginary unit’]

 

mathematics2 = ["integral", "π", "🥺", "pi", "円周率", "Euler's number", "オイラー", "imaginary unit"]
sorted(mathematics2) # アルファベット,記号,五十音,絵文字の順となる.
[“Euler’s number”, ‘imaginary unit’, ‘integral’, ‘pi’, ‘π’, ‘オイラー’, ‘円周率’, ‘🥺’]

 

 Keyパラメータを指定して,絶対値順、文字列の長さ順,昇順降順など、様々な条件で並び替えることができます.

sorted(mathematics2, key = len, reverse = True) # lenで文字列の長さ順,reverse = Trueで降順にソート
[‘imaginary unit’, “Euler’s nmber”, ‘integral’, ‘オイラー’, ‘円周率’, ‘pi’, ‘π’, ‘🥺’]

 

.sort()メソッド → 元のリストをソートされたリストに書き換える.

mathematics1 = ["integral", "pi", "Euler's number", "imaginary unit"]
mathematics1.sort()
mathematics1 # 元のリストがソートされたリストに変更される.
[“Euler’s number”, ‘imaginary unit’, ‘integral’, ‘pi’]

 要素が数値なら数値の昇順,文字列ならアルファベット・五十音順にソートされます,数値と文字列を混合するとエラーとなります.
 

 

要素の検索

.index()メソッド → 要素のオフセットを調べる.

fibo1 = [0, 1, 1, 2, 3, 5, 8]
fibo1.index(8) # 8のオフセットが出力される.
6


 

fibo1.index(1) # 同じ要素があると最初の値のオフセットが出力される.
1

 

.count()メソッド → 要素の個数を調べる.

fibo1.count(8)
1

 

fibo1.count(1) # フィボナッチ数列なので,1が2つある.
2

 

len()関数 → リスト内の要素数を調べる.

len(fibo1)
7

 

in → 要素の有無を調べる.
 Trueと返ってきたら,要素が有り,Falseと返ってきたら要素は無いという判定です.TrueとFalse(論理値)のことを詳しく説明していないので,ここでは有無(真偽)をこのように確認するんだなくらいの理解で結構です.

8 in fibo1
True

 

4 in fibo1
False

 

リストについて,基本を学べましたでしょうか?
次は「タプル」について学びましょう!

【Python初心者】タプル【リスキリング】
Pythonを勉強するために本を買ったけど,積読,挫折していませんか?タプルの操作について,基本から分かりやすく解説しています.Pythonを学びたい方、学び直したい方、より深く学びたい方は,ぜひご一読ください.

最後まで読んでくださり,ありがとうございます☺️

 

タイトルとURLをコピーしました