複数の要素をひとつのデータとして管理するリスト型について書いていきます。
リスト型と関連命令
リスト型とその関連命令について説明していきます。動作確認は次の項目で行っています。
リスト型とは
list_name(リスト名) = [数値, ‘文字列1’]
一番シンプルなデータの集合体です。左辺にリストの名前を定義して、右辺に[ ]で囲いリストを作ります。リストの内容は、数値のみ、文字のみ、数値と文字が混在しても構いません。
データ列の並び順をインデックスと言います。先頭が0、その次が1となります。
あるある?
プログラム上でインデックスを指定する時は、先頭0が絶対ですが、メールや電話で**番目(インデックス**番目)のデータは、先頭を1として数えている場合があります。これは、発信者がプログラムをあまり分かっていない場合、もしくはそこは周知の事実だろうという思い込みなどから起こるミスコミュニケーションです。間違いないように確認することが後々のバグ防止につながります。
リストに追加
list_name.append(要素)
.append()
リストの末尾にデータを追加できます。追加できる個数は「ひとつ」です。
list_name.insert(インデックス, 要素)
.insert()
リストの追加したい要素を、指定したインデックスに追加・挿入します。
リストから削除
list_name.remove(要素)
.remove()
リスト内のデータを指定して削除できます。削除できる個数は「ひとつ」です。
list_name.pop(インデックス)
del list_name[インデックス]
.pop()
指定したインデックスの要素を削除して、要素を.pop()に格納します。
del name[]
指定したひとつまたは連続した複数のインデックスの要素を削除します。
複数の要素を削除する場合は、○番目から○○番目までといった様に範囲を指定して使用します。
[削除する要素の先頭インデックス:削除する要素の最終インデックスの次の値]
の様になります。
要素を並べ替える
list_name.sort()
list_name.sort(reverse=True)
破壊的ソート
元のデータが無くなります。
()内に何も書かなかったら昇順にソートします。降順にソートしたい場合は「reverse=True」です。数値と文字列が混合したリストはエラーになります。
sorted_list(変数) = sorted(リスト名 )
sorted_list(変数) = sorted(リスト名, reverse=True )
非破壊的ソート
元のデータを残してソートします。変数を用意してソートしたデータを変数に落とし込みます。昇順、降順は破壊的ソートと同じです。
その他のデータ管理
リスト型以外にも、「辞書型」や「タプル型」などあります。整理できたら追加していきます。
動作確認
説明してきた内容を実際にコードを書いてみてどんな感じになるのか確認していきます。
今回はコマンドプロンプトで確認します。コードを載せておくので、コマンドプロンプト、開発ソフトなどで触ってみて下さい。
リスト型の基本
リストを表示
リストを作って表示させます。

コマンドプロンプトだとprint()でもリスト名でも表示されますが、Thonnyで同じコードを書いて動かすと、print()の結果のみがシェルに表示されます。データを取得していますが、表示命令ではないので表示されていません。
list_name = [1, '2', '文字']
print(list_name)
list_name
>>>[1, '2', '文字']リスト内のデータを参照
リストから□番目のデータを参照(抽出)します。

リストからデータ参照できていることがわかります。リスト内の順番を示す番号は「0」からはじまります。
list_name = [1, 2, 3]
print(list_name[0])
print(list_name[1])
print(list_name[2])
list_name[0]
list_name[1]
list_name[2]
>>>1
>>>2
>>>3a = list_name[0]
と言う風に、変数に落とし込んで使用することができます。0をiなどの変数にしてfor文を使ってリストを順番に落とし込んで使用することもできます。
リストにデータを追加
末尾に追加
.append()
リストにデータをひとつ追加します。

データは末尾に追加されていることが分かります。
list_name = [1, 2, 3]
list_name.append(4)
print(list_name)
>>>[1, 2, 3, 4]インデックスを指定して追加(挿入)
.insert(index, 要素)

.insert()によって、インデックス「2」(3番目)に要素「4」が挿入されています。
list_name = [1, 2, 3 ]
list_name.insert(2, 4 )
print(list_name)
>>>[1, 2, 4, 3]リストからデータを削除
要素を指定して削除
リストにあるデータを削除します。

指定して値が削除されています。指定した値が複数ある場合は、先頭から順番に参照して先に該当した値が削除されているのがわかります。
list_name = [1, 2, 3, 4]
list_name.remove(3)
print(list_name)
>>>[1, 2, 4]
list_name2 = [1, 2, 3, 1]
list_name2.remove(1)
print(list_name2)
>>>[2, 3, 1]インデックスを指定して削除(データ抽出)
.pop()
.pop()で削除したデータが別途抽出されます。

.pop()の直後に削除した値が表示されていて、list_nameを表示すると削除されているのがわかります。
list_name = [1, 2, 3, 4]
list_name.pop(2)
print(list_name)
>>>3
>>>[1, 2, 4]removed_element = list_name.pop(2)
とすると、.pop()処理と削除する要素を変数に落とし込む作業を一行でおこないます。
インデックスを指定して削除(複数指定可)
del name[]

delによって指定したインデックスの値が削除されているのが分かります。複数要素を削除する範囲を指定して要素が削除されているのが分かります。範囲指定の開始は理解できますが、終了の指定は削除させたいインデックス+1しないといけないのが、私の頭の中で消化しきれていないです。
list_name2 = [1, 2, 3, 4, 1]
del list_name2[1: 3]
print(list_name2)
>>>[1, 4, 1]要素を並べ替える
破壊的ソート(昇順と降順)

昇順と降順でソートしてみました。list_nameを表示すると順番が変わっています。元の順番は、消滅しています。
list_name = [5, 4, 3, 1, 2, 1]
list_name.sort()
print(list_name )
>>>[1, 1, 2, 3, 4, 5]
list_name.sort(reverse=True)
print(list_name )
>>>[5, 4, 3, 2, 1, 1]非破壊的ソート(昇順と降順)

元のデータは残っていて、sorted_listにソート(昇順)したデータが格納されていることが分かります。
また、昇順に並んでいるsorted_listを降順にソートしたことで、sorted_list2は大きい数値から並んでいるのがわかります。元のデータsorted_listは変わらずに残っているのが確認できます。
list_name = [5, 4, 3, 1, 2, 1]
sorted_list = sorted(list_name )
print(list_name )
print(sorted_list )
>>>[5, 4, 3, 1, 2, 1] ←list_name
>>>[1, 1, 2, 3, 4, 5] ←sorted_list
sorted_list2 = sorted(sorted_list, reverse=True )
print(list_name )
print(sorted_list )
print(sorted_list2 )
>>>[5, 4, 3, 1, 2, 1] ←list_name
>>>[1, 1, 2, 3, 4, 5] ←sorted_list
>>>[5, 4, 3, 2, 1, 1] ←sorted_list2


コメント