リストとは?
今回はリストとか配列と呼ばれる仕組みに関して解説します。
前に変数に関して、説明しました。
その時、変数名と変数は一対一の関係でした。
list1 = "Hello World"
print(list1)
実行結果
Hello World
ただいつもいつも一対一の関係でないこともあり、例えば複数の値に対して、カテゴリー化したいという時もあることでしょう。
そんな時に使えるのが、リスト(配列)と呼ばれる仕組みです。
他にも同じような変数として、タプルとか辞書とかありますが、私自身ほぼ使わないので、3PySciではリストを重点的に解説します。
リストの作り方
まずはリストを作ってみます。
これも前に説明した変数と同じ考え方でリストの箱を作るイメージです。
分かりやすいように毎回、print関数で表示させていきます。
慣れたら、いちいち表示する必要はありません。
list = []
print(list)
実行結果
[]
リストの場合は、何も入っていない空のリストを作ることができます。
また最初から値を入れることもでき、その値は文字でも数字でも大丈夫です。
ちなみに値のことは「要素」と呼ばれます。
文字の場合
list1 = ["Hello World"]
print(list1)
実行結果
['Hello World']
数字の場合
list2 = [12345]
print(list2)
実行結果
[12345]
この数字の場合、計算可能な数値としてPythonは認識しています。
ただ時には文字とした数字が必要な場合もあります。
その場合には、数字をダブルクオーテーションで囲いましょう。
list2 = ["12345"]
print(list2)
実行結果
['12345']
この場合、数字は文字として認識され、計算に用いることはできません。
今後、こういった機会が出てくるので、記憶の隅に置いておいてください。
上記の例ではリストに一つの要素しかはいっていません。
このままでは変数と何が違うか分かりにくいですよね。
変数の真骨頂は複数の要素を保持できるところにあります。
複数の要素を入れる場合には、それぞれの要素をカンマ(,)で区切ります。
文字の場合
list1 = ["a", "b", "c", "d", "e"]
print(list1)
実行結果
['a','b','c','d','e']
数字の場合
list2 = [1, 2, 3, 4, 5]
print(list2)
実行結果
[1, 2, 3, 4, 5]
これで空のリストの作り方、また最初から要素をもったリストの作り方が分かりました。
インデックスとは?
リストは一度作った後、一つの要素を呼び出したり、自由に編集することができます。
ただその時に、リストには順番があることを覚えておいてください。
そして数え方は1からではなく0から始まります。
この順番のことをインデックス(index)と呼びます。
要素の呼び出し方
リスト内の要素はインデックスを用いて、呼び出すことができます。
list1 = ["a", "b", "c", "d", "e"]
print(list1[0])
実行結果
a
list1 = ["a", "b", "c", "d", "e"]
print(list1[3])
実行結果
c
また後ろから何番目の要素を呼び出したいということもあるでしょう。
その場合は、マイナスをつけることで後ろから数えた要素を呼び出すことができます。
ただしその場合はインデックスとして「-0」はありません。
list1 = ["a", "b", "c", "d", "e"]
print(list1[-1])
実行結果
e
list1 = ["a", "b", "c", "d", "e"]
print(list1[-4])
実行結果
b
複数の要素を一気に取ることも可能です。
先頭から途中まで取る場合
list1 = ["a", "b", "c", "d", "e"]
print(list1[:3])
実行結果
['a', 'b', 'c']
この場合、先頭からインデックスが3となる要素の前の要素、つまり”d”ではなく”c”まで取得します。
末尾から途中まで取る場合
list1 = ["a", "b", "c", "d", "e"]
print(list1[3:])
実行結果
['d', 'e']
こちらの場合はインデックスが3となる要素である”d”から末尾の”e”まで取得します。
前は取得範囲に入るが、後ろは入らないことに注意しましょう。
両方合わせて、一定範囲を取ることも可能です。
ある範囲の要素を取る場合
list1 = ["a", "b", "c", "d", "e"]
print(list1[2:4])
実行結果
['c', 'd']
要素を末尾に追加 append
要素を末尾に追加したい場合は「append」を使うことで可能です。
list1 = ["a", "b", "c", "d", "e"]
list1.append("f")
print(list1)
実行結果
['a', 'b', 'c', 'd', 'e', 'f']
ただし2つの要素を一気に追加はできないので注意です。
list1 = ["a", "b", "c", "d", "e"]
list1.append("f", "g")
print(list1)
実行結果
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-X-XXXXXXXXXXXX> in <module>
1 list1 = ["a", "b", "c", "d", "e"]
----> 2 list1.append("f", "g")
3 print(list1)
TypeError: append() takes exactly one argument (2 given)
文字を格納したリストに数字を入れることは可能です。
list1 = ["a", "b", "c", "d", "e"]
list1.append(6)
print(list1)
実行結果
['a', 'b', 'c', 'd', 'e', 6]
リストにさらにリストを入れることも可能です。
list1 = ["a", "b", "c", "d", "e"]
list1.append(["f", "g", "h"])
print(list1)
実行結果
['a', 'b', 'c', 'd', 'e', ['f', 'g', 'h']]
ただしこのリストは2次元リストと呼ばれ、今までのリストとは異なります。
この場合、インデックスで0-4(つまり”a”, “b”, “c”, “d”, “e”)までは要素を1つづつ取得することができます。
list1 = ["a", "b", "c", "d", "e"]
list1.append(["f", "g", "h"])
print(list1[0])
実行結果
a
list1 = ["a", "b", "c", "d", "e"]
list1.append(["f", "g", "h"])
print(list1[4])
実行結果
e
ですがインデックスで5とすると、追加した要素[“f”, “g”, “h”]が出てきてしまいます。
list1 = ["a", "b", "c", "d", "e"]
list1.append(["f", "g", "h"])
print(list1[5])
実行結果
['f', 'g', 'h']
この場合のインデックスのつき方はこんな感じです。
そして”g”を取得したい場合は、こうなります。
list1 = ["a", "b", "c", "d", "e"]
list1.append(["f", "g", "h"])
print(list1[5][1])
実行結果
g
単純に7番目だからインデックスを6として取得しようとするとエラーとなります。
list1 = ["a", "b", "c", "d", "e"]
list1.append(["f", "g", "h"])
print(list1[6])
実行結果
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-X-XXXXXXXXXXXX> in <module>
1 list1 = ["a", "b", "c", "d", "e"]
2 list1.append(["f", "g", "h"])
----> 3 print(list1[6])
IndexError: list index out of range
複数を入れ子にすると、こんな複雑なリストを作ることもできます。
list1 = [["a", "b"], ["c", ["e", "f", ["g", "h", "i"]]]]
print(list1[1][1][2][1])
実行結果
h
あまりやりすぎるとどうやって要素を取得したらいいか分からなくなるので、ほどほどにしとくのがいいでしょう。
リストの要素数を取得
リストの中に要素が何個あるか取得する方法です。
これは後ほど紹介するfor文とかでよく用いるので、覚えておいてそんはないです。
lenという関数を用い、len(リスト名)というのが基本です。
この括弧の中に要素数を調べたいリストを入れます。
list1 = ["a", "b", "c", "d", "e"]
print(len(list1))
実行結果
5
ただしリストが入れ子になっている場合、先ほどのインデックスのように要素数も取り方が変わるので注意しましょう。
list1 = ["a", "b", "c", ["d", "e"]]
print(len(list1))
実行結果
4
“d”、”e”が入っているリストの要素数を取得したい場合は、そのインデックスを指定します。
list1 = ["a", "b", "c", ["d", "e"]]
print(len(list1[3]))
実行結果
2
とりあえずリストに関してはこんな感じで。
もちろん場所を指定して要素を追加したり(insert)、要素を削除する(del, clear, remove)なんかもできますが、個人的にほぼ使わないので、もし必要な方がいたら、調べてみてください。
次回は処理を繰り返す方法for文なるものを解説していきます。
ということで今回はこんな感じで。
コメント