Contents
Pythonのリスト
プログラムでは、複数のデータを一覧にして管理することがよくあります。
そのような場合には、リスト型を使うと便利です。
リスト型には、数値や文字列などの複数のオブジェクトを順序をつけて格納しておくことができます。
Pythonのリストには、どんなオブジェクトを入れることができます。
数値、文字列はもちろん、リストの中にリストを入れることもできます。
リストの長さも必要に応じて自動的に大きくなったり小さくなったりします。
あらかじめ領域を確保したり、増やしたりする必要はありませんので、難しいことを考えることなく非常に楽に便利に使うことができます。
リストは、それぞれの要素に整数のインデックスが振られています。
リストの要素はインデックスを使って取り出すことができます。要素を削除したり変更することもできます。
スライスという機能を使うと、複数の要素に対する操作が簡単に行えます。
リストには、並べ替え(ソート)したりするメソッドがあらかじめ組み込まれています。メソッドを使うことで、簡単に複雑なプログラムを作ることができます。
言葉ばかりで説明しても分かりにくいので、さっそく、実際にリストを作って、いろいろと操作してみましょう。
リストを定義する
リストを定義するためには、全体を角括弧([])で囲みます。リストに格納する要素はカンマ(,)で区切ります。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c", "d", "e"]
print (a)
print (b)
if __name__ == '__main__':
main()
これを実行すると以下のように表示され、リストが作れていることが確認できます。Pythonのリストは角括弧([])で表されます。
[1, 2, 3, 4, 5]
['a', 'b', 'c', 'd', 'e']
インデックスを指定して要素を取り出す
それでは、先ほど作ったリストにインデックスを指定して要素を取り出してみましょう。
変数名に続けて角括弧[]の中に整数を添えるだけです。
インデックスにマイナスの整数を添えると最後から数えた要素を取り出すことができます。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c", "d", "e"]
print (a[0])
print (b[-2])
if __name__ == '__main__':
main()
これを実行すると、1とdが表示されます。
リストは、1ではなく0から数えますので、a[0]というのは変数aのリストの1番目の要素という意味です。したがって、1が取り出されて表示されます。
次に-2というのは、後ろから数えて2つ目の要素という意味ですので、変数bのリストの後ろから2番目の要素という意味になります。したがって、dが表示されます。
a[100]のようにリストが持っている要素の数より大きな整数を与えると、エラーになります。
スライスを利用して要素を取り出す
スライスを使うと、リストが持つ複数の要素を取り出すことができます。
スライスを使うには、リストの要素を指定する添字にコロン(:)を使って区切った複数の整数を書きます。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c", "d", "e"]
print (a[0:2])
print (b[2:4])
if __name__ == '__main__':
main()
これを実行すると、以下のように表示されます。
[1, 2]
['c', 'd']
もう説明しなくても分かりますよね。
スライスに添えるインデックスは、省略することができます。
コロン(:)の前を省略すると、0を指定した場合と同じように扱われ、コロン(:)の後ろを省略すると要素の最後までという意味になります。
ちなみに、コロン(:)の後ろに要素の数を超える大きな整数を指定してもエラーにはなりません。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c", "d", "e"]
print (a[:3])
print (b[-2:])
print (a[2:100])
if __name__ == '__main__':
main()
これを実行すると、それぞれ以下のように表示されます。
[1, 2, 3]
['d', 'e']
[3, 4, 5]
説明しなくても大丈夫ですよね。
このスライスの省略形は、よく使われますので、出てきたときに自分で意味が分かるようにしておきましょう。
リストを使った足し算と掛け算
リストは足し算や掛け算を行うことができます。
リストの足し算
足し算や掛け算をすることで、リストとリストを連結することができます。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c", "d", "e"]
c = a + b
print (c)
if __name__ == '__main__':
main()
これを実行すると、[1, 2, 3, 4, 5, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’]と表示され、リストaとリストbが連結されていることが分かります。
リストを足し算で連結するためには、必ずリスト型とリスト型を足し算する必要があります。
リスト型と文字列型やリスト型と数値型を足し算で連結することはできません。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c", "d", "e"]
c = a + 100
d = b + "x"
print (c)
if __name__ == '__main__':
main()
これらはいずれもエラーになります。
もし、これをやりたければ、100やxを角括弧([])で囲んでリストにしてやる必要があります。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c", "d", "e"]
c = a + [100]
d = b + ["x"]
print (c)
print (d)
if __name__ == '__main__':
main()
これを実行すると、リストが結合されていることが分かると思います。
リストの掛け算
リストを掛け算すると、その数だけ繰り返すという意味になります。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c", "d", "e"]
c = a * 3
print (c)
if __name__ == '__main__':
main()
これを実行すると、[1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5]と表示されます。
リストの要素の置き換えと削除
Pythonのリストの要素は、追加するだけではなく、削除や置き換えを行うこともできます。
インデックスを使った要素の置き換え
インデックスを使って要素を指定して、要素を置き換えてみましょう。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c", "d", "e"]
a[1] = "b"
print (a)
if __name__ == '__main__':
main()
これを実行すると、変数aの2つ目の要素が置き換えられていることが確認できます。
del文を使った要素の削除
リストの要素を削除するにはdel文を使います。
delに続けて削除したい要素を記述します。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c", "d", "e"]
del a[1]
print (a)
if __name__ == '__main__':
main()
これを実行すると、変数aのリストの2つ目の要素が削除されたことが確認できます。
リストの多次元配列
リストの中にリストを入れる事で、多次元配列を作ることができます。
多次元配列は、少し複雑になるので、最初は理解するのが難しいのですが、少しずつ慣れてきますので安心して下さい。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
board = [[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0]]
print (board[3][3])
if __name__ == '__main__':
main()
リストの中にリストを入れて、縦横の2次元配列を作っています。
0を白、1を黒と考えることで、8マス×8マスのオセロの盤面を表すことができますね。
多次元配列の要素を取り出すには、角括弧([])を続けて書きます。
上の例では、4行目の4列の要素を取り出すという意味になります。
先ほども説明しましたが、Pythonは0から数えますので、3つ目ではなく4つ目なので注意して下さいね。
これを実行すると、1と表示され、多次元配列の中の4行4列目の1を取り出せていることが分かります。
リスト型の関数とメソッドを使ってみよう
Pythonのリスト型には、よく使う関数やメソッドがあらかじめ組み込まれています。
全部説明はできないのですが、よく使ういくつかの関数とメソッドを実際に使ってみましょう。
リストの最大値と最小値を取り出す関数
max()という関数を使うと、リストの要素から最大値を取り出すことができます。
min()という関数を使うと、リストの要素から最小値を取り出すことができます。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [50, 15, 1, -2, 3, 4, 5, 8, 100, 200]
print (max(a))
print (min(a))
if __name__ == '__main__':
main()
これを実行すると、200と-2が表示され、それぞれ最大値と最小値が出力できていることが分かります。
リストのソートメソッド
リストのソートメソッドを使うとリスト内の数値を並べ替えることができます。
sort()を使うと、数値を小さい順に並べ替えられます。
reverse()を使うと、数値を大きい順に並べ替えることができます。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [50, 15, 1, -2, 3, 4, 5, 8, 100, 200]
a.sort()
print (a)
a.reverse()
print (a)
if __name__ == '__main__':
main()
これを実行すると、小さい順、大きい順に並べ替えができていることが分かります。
細かいことですが、ソートメソッドは、実行した後の結果を代入する必要がありません。
a = a.sort()
のように記述する必要がないということです。ソートメソッドが実行された段階で、中身の順序が並べ替えが完了しています。
append()で要素を追加する
append()を使えば、リストに要素を追加することができます。
#!/usr/bin/env python
#-*- coding: utf-8 -*-
def main():
a = [50, 15, 1, -2, 3, 4, 5, 8, 100, 200]
a.append(300)
print (a)
if __name__ == '__main__':
main()
これを実行すると、最後に300という要素が追加されたのが分かります。
まとめ
今回はPythonのリスト型を説明しました。
あらかじめ備わっている機能である組み込み関数やメソッドなどは使いこなすと複雑なプログラムを簡単に作れますので、使いこなせるようにしましょう。
多次元配列は、3次元、4次元になってくると複雑で理解するのが難しくなってきますが、慣れてくると簡単に理解できるようになりますので、最初は分からなくても気にしなくて大丈夫です。
今回作ったサンプルをいろいろ自分で改造して、どのようになるか実験してみて下さい。