横浜国立大学理工学部建築都市環境系学科卒
一級鉄筋技能士
変数では1つのデータを取り扱っていますが、データ解析では何万というデータを取り扱います。
その時、変数も同じ数だけ用意すると、どの変数がどの値かわからないですし、コードがごちゃごちゃしてしまいます。
データを複数まとめて扱う場合には、配列という考えがあります。
今回は配列であるlistについて習得していきます。
数値や文字列について取り扱いますが、listや変数もそうですが、関数を取り扱うこともできます。
数値や文字列だけにとらわれてしまうと、他の人のコードをみたときに??となるので、頭の隅にでも置いてください。
目次
配列について
変数で1つのデータを取り扱いますが、配列では複数のデータを扱うことができます。
例えば、5,4,7,9,4の数値をまとめて取り扱いたいとします。
この時は、下記のように宣言します。
1 |
num_list = [5, 4, 7, 9, 4] |
イメージ的には、下記のようになります。
num_listには5つの数字がまとめて入っていて、
データを取り出すのに必要な配列番号(index)があり、0〜割り当てられています。
tapleは変更できない配列
配列にはlist以外にもtuple(タプル:丸括弧)があります。
listは配列にデータの追加などができるのに対して、tupleは変更ができないものです。
本記事ではlistを取り扱っていきます。
データは追加削除など変更ができた方が便利なためです。
list:[]は変更可能
taple:()は変更できない
listの基本
新規作成
listの作成は角括弧([ ])のなかに、カンマ(,)区切りでデータを入れていくだけです。
配列名 = [データ1, データ2, …. , データn]
先ほどと同じになりますが、5つのデータのlistを作ってみます。
1 |
num_list = [5, 4, 7, 9, 4] |
num_listがlist型になっているかtypeを使って確認することができます。
1 |
type(num_list) |
1 |
list |
listとなってますね。
次のように、データを何も入れないと、空のlistを作ることができます。
1 |
num_list = [] |
listを初期化するときなどに使います。
indexを指定してデータを取り出す
次に配列からデータを取り出してみましょう。
取り出すには、次のように配列番号であるindexを指定します。
1つ取り出す
まず、1つだけ取り出します。配列名[index]で取得できます。
1 2 |
a = num_list[1] print(a) |
実行するとaに4が取得できます。indexは0から始まるので1とすることで、2つ目の4が取得できます。
複数取り出す
次は、複数を取り出してみましょう。
配列名[開始index:終了index]のように開始、終了indexを指定することで取得できますが、終了indexの1つ手前まで取得するので注意が必要です。
2つ目から3つ目の4,7を取得する場合は、開始indexを1、終了indexを3とするので、下記コードになります。
1 2 |
a = num_list[1:3] print(a) |
終了indexまで含まれないので、違和感を感じる方は覚えておきましょう。
マイナスのindexは後ろからの配列番号
indexにマイナスを使う場合があります。
0から割り当てられているindexですが、下記のイメージのように、後ろに同じ配列がつながっているかのようにマイナスのindexが割り当てられています。
-2のindexを使ってみましょう。
1 2 |
a = num_list[-2] print(a) |
後ろから二つ目の9が出力されます。
データ数を確認するにはlen関数を使う
listがどれくらいのデータ数を持っているか確認していきます。
確認方法は簡単で、len関数を使います。
1 2 |
a = len(num_list) print(a) |
今、num_listには5つの数字を入れているので、その長さである5が取得できます。
簡単ですが、よく使いますので、覚えておきましょう。
for文とlistを組み合わせてイテレーターを作る
listとfor文の組み合わせは必須となってきます。
次の二つの構文を押さえておけば十分です。
for文にはイテラブル(繰り返し可能な物)を使いますが、そこにlistを使います。
変数にはlistの中身が繰り返し入っていき、それが繰り返されます。
実際に使ってみましょう。
1つ目の構文です。
1 2 |
for num in num_list: print(num) |
リストの数字が順番に出力されます。
次に2つ目の構文です。
1 2 |
for ind, num in enumerate(num_list): print(ind, num) |
enumerate関数を使用すると、配列番号と数字が出力されます。
printではカンマ(,)区切りで表示したいデータを渡すことができます。
listのデータを追加、連結するメソッド
listのデータの追加の方法を習得していきましょう。
方法は以下のような3つの方法がありますが、listにlistを追加する方法が本来の機能を理解しやすいので、[0, 0]のlistを追加していきます。
メソッド | 機能 | イメージ |
---|---|---|
append | listの最後に追加 | |
extend | listの最後に別のlistやtupleを繋げる | |
insert | listの途中に追加 |
append listの最後に新しく追加
appendはlistの最後に新しく追加します。
追加するのは、数値、文字、配列、関数何でも追加可能です。
今回は機能のわかりやすさのため、新しい[0, 0]を追加します。
num_listには5つの数字がありますが、appendを使うと、6つ目の箱ができそこにデータが追加されます。
1 2 3 |
num_list = [5, 4, 7, 9, 4] num_list.append([0, 0]) print(num_list) |
1 |
[5, 4, 7, 9, 4, [0, 0]] |
イメージと合っていたでしょうか?下記のようなイメージを持った方もいるのではないでしょうか?
配列ではなく、単に0などの数値を追加するとイメージ通りになります。
1 2 3 4 |
num_list = [5, 4, 7, 9, 4] num_list.append(0) num_list.append(0) print(num_list) |
extend listとlistを連結する
listとlistを連結する場合は、extendを使います。
1 2 3 |
num_list = [5, 4, 7, 9, 4] num_list.extend([0, 0]) print(num_list) |
1 |
[5, 4, 7, 9, 4, 0, 0] |
extendを使わなくても、「+」でも連結できます。
1 2 3 |
num_list = [5, 4, 7, 9, 4] num_list = num_list + [0,0] print(num_list) |
この場合は、「=」で連結した値を入れる必要があります。
insert indexを指定して追加
insertはindexを指定できる、appendのようなものです。
insertでは追加するindexを指定しますので、insert(index, 追加するもの)となります。
index=1に[0, 0]を追加してみます。
1 2 3 |
num_list = [5, 4, 7, 9, 4] num_list.insert(1, [0, 0]) print(num_list) |
1 |
[5, [0, 0], 4, 7, 9, 4] |
listのデータをデータの削除するメソッド
削除もいくつかメソッドがあります。
メソッド | 機能 | イメージ |
---|---|---|
clear | 全削除 | 全部消えるだけなので省略 |
pop | listの一部を取り出しつつ削除 | |
remove | listの一部を削除 |
clear 全削除
全削除は方法が2つあります。
clearメソッドを使うか、空のリストを入れ直します。
1つ目clearメソッドを使ってみましょう。
1 2 3 |
num_list = [5, 4, 7, 9, 4] num_list.clear() print(num_list) |
listが空になりましたね。
次は、空のlistを入れます。
1 2 3 |
num_list = [5, 4, 7, 9, 4] num_list = [] print(num_list) |
こっちの方が、使っている方は多いですね。
pop 取得して削除
listの一部を取り出すpopメソッドを使います。
取り出す機能ですので、listから削除されます。
popメソッドをそのまま使うと、listの最後から取り出します。
1 2 3 4 5 |
num_list = [5, 4, 7, 9, 4] a = num_list.pop() print(a, num_list) a = num_list.pop() print(a, num_list) |
1 2 |
4 [5, 4, 7, 9] 9 [5, 4, 7] |
取り出した値と取り出されたlistが表示されますね。
popにindexを指定することで、そのindexを取得できます。
index=1を指定してみます。
1 2 3 |
num_list = [5, 4, 7, 9, 4] a = num_list.pop(1) print(a, num_list) |
1 |
4 [5, 7, 9, 4] |
index=1の4が取得できます。
remove データを指定して削除
removeメソッドを使うことで、indexではなく、データを指定して削除することができます。
4を指定して削除します。
1 2 3 |
num_list = [5, 4, 7, 9, 4] num_list.remove(4) print(num_list) |
1 |
[5, 7, 9, 4] |
2つがある場合は、最初に該当するデータのみ削除されます。
もう一つの4は残ってますね。
listのデータを並び替える
データの並べ替えにはsortメソッドを使います。
昇順
まずは、昇順から
1 2 3 |
num_list = [5, 4, 7, 9, 4] num_list.sort() print(num_list) |
1 |
[4, 4, 5, 7, 9] |
降順
降順は引数にreverse=Trueを入れます。
1 2 3 |
num_list = [5, 4, 7, 9, 4] num_list.sort(reverse=True) print(num_list) |
1 |
[9, 7, 5, 4, 4] |
以上までが、基本的な使い方です。
listの応用
listは色々と他にも使い方がありますので、紹介していきます。
多次元配列
listでは多次元を扱うことができますが、今回はわかりやすく2次元を説明します。
2次元はlistの中にlistを入れるだけです。
次のようなデータをlistで作ってみましょう。
名前 | 社員コード | 年齢 |
---|---|---|
Aさん | 00001 | 35 |
Bさん | 00002 | 40 |
Cさん | 00003 | 54 |
Dさん | 00004 | 23 |
1 2 3 4 5 6 |
employee = [['Aさん', '00001', 35], ['Bさん', '00002', 40], ['Cさん', '00003', 54], ['Dさん', '00004', 23]] print(employee) print('list長さ', len(employee)) |
1 2 |
[['Aさん', '00001', 35], ['Bさん', '00002', 40], ['Cさん', '00003', 54], ['Dさん', '00004', 23]] list長さ 4 |
ついでに、lenでlistの長さを確認していますが、1次元目の長さのみ表示されます。
2次元データはlistでも良いですが、基本的に多次元データはnumpyというライブラリを使うことをお勧めします。
検索
listの中にデータが含まれるのか?含まれるならどこにあるのか?など検索をすることができます。
inを使う
listの中に含まれるかの確認はinを使います。
検索対象 in list
いくつか例を示します。
1 2 3 4 |
employee_code = ['00001', '00002', '00003', '00004'] print('00001' in employee_code) # 存在するデータ print('00005' in employee_code) # 存在しないデータ print(1 in employee_code) # 型が違う |
1 2 3 |
True False False |
完全一致でないと、一致しているTrueの結果が返ってこないことがわかります。
これはif文でよく使います。例えば、
1 2 3 4 |
if '00001' in employee_code: print('00001がいます。') else: print('00001がいません。') |
1 |
00001がいます。 |
といった感じです。
indexを使う
検索対象がどこに格納されているか確認する場合にはindexを使います。
list.index(検索対象)
1 2 3 |
employee_code = ['00001', '00002', '00003', '00004'] a = employee_code.index('00002') print(a) |
1 |
1 |
listの数値を計算する関数
listで数値を扱う場合は、よく計算もします。
一通り計算方法を説明していきます。
計算には[5, 4, 7, 9, 4]を再度使います。一度下記を実行しておきましょう。
1 |
num_list = [5, 4, 7, 9, 4] |
max関数 最大値
max関数を使います。
1 2 |
a = max(num_list) print(a) |
1 |
9 |
min関数 最小値
min関数を使います。
1 2 |
a = min(num_list) print(a) |
1 |
4 |
sum関数 合計
sum関数を使います。
1 2 |
a = sum(num_list) print(a) |
1 |
29 |
sumをlenで割ると平均
平均はないので、sumで合計を算出して、lenでデータ数で割ります。
1 2 |
a = sum(num_list)/len(num_list) print(a) |
1 |
5.8 |
統計的な計算はstatisticsを使うことでできます。
下記でstatisticsをimportしましょう。
1 |
import statistics |
stdev関数 標本標準偏差
stdev関数を使います。
1 2 |
a = statistics.stdev(num_list) print(a) |
1 |
2.16794833886788 |
median関数 中央値
median関数を使います。
1 2 |
a = statistics.median(num_list) print(a) |
1 |
5 |
count関数 データ数をカウント
count関数を使うことで、listに含まれるデータ数を数えることができます。
ない場合は、0となります。
1 2 3 |
print('5の個数', num_list.count(5)) print('4の個数', num_list.count(4)) print('1の個数', num_list.count(1)) |
1 2 3 |
5の個数 1 4の個数 2 1の個数 0 |
まとめ
この記事では、listの使い方の基本から応用まで紹介しました。
覚えるのは大変かもしれませんが、よく使うものばかりですので、ぜひ習得していってください。