アルゴリズムとPythonについて書いていきます。
目次
0.アルゴリズムとは
1.リストとは
2.リストの使いかた
2-0.リストの作成
2-1.リスト内包表記
2-2.他のデータ型からリストをつくる
2-3.要素の取得
2-4.要素の更新
2-5.要素の追加
2-6.要素の削除
2-7.要素の並べ替え
2-8.リストのリスト
2-9.リストの結合
2-10.その他の操作
#0.アルゴリズムとは
計算や作業をするための手順のことです。
短時間で効率的に処理をすることを目指します。
#1.リストとは
データ構造の1つで、データを一直線に並べた構造をしています。
大量のデータを扱うアルゴリズムではよく使われます。
リストはデータの追加や削除がしやすい反面、アクセスに時間がかかります。
Point : データ構造
データをコンピュータのメモリにいれる時に、データの順番や位置関係などを定めたものです。
###1-0.Pythonとリスト
Pythonでは、配列よりもリストを使うことが多いです。
リストの要素は、任意のPythonオブジェクトで良いです。
そして、要素の型は統一しなくて良いです。
Point : 配列
データ構造の1つで、データを一列に並べるものです。
データへのアクセスは簡単に行える反面、追加や削除には手間がかかります。
#2.リストの使いかた
###2-0.リストの作成
◯リストの名前 = []
という形でリストをつくります。
#要素がない空のリストをつくる
color_list = []
もちろん最初から要素を入れてつくることもできます。
その場合は、下のようにカンマで区切って要素を入れます。
#リストに要素をいれる
color_list = ['Red','Yellow','Green']
###2-1.リスト内包表記
◯様々な種類のリストを効率的につくるために、リスト内包表記が使われます。
####リスト内包表記とは
◯リストをつくる方法の1つです。
[リストに格納する要素 for 要素 in イテラブルオブジェクト]という形で定義します。
リストに格納する要素は、要素を使用した式です。
イテラブルオブジェクトは、要素を1つずつ取り出すことのできるオブジェクトのことです。
####リスト内包表記の使用例
◯range()関数はイテラブルオブジェクトを返します。
#1以上10未満の整数を1つずつ取り出して、その値をnumbersリストに格納する
numbers = [number for number in range(1,10)]
print(numbers)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
#1以上10未満の整数を1つずつ取り出して、それに2をかけた値をnumbersリストに格納する
numbers = [number * 2 for number in range(1,10)]
print(numbers)
[2, 4, 6, 8, 10, 12, 14, 16, 18]
#1以上10未満の整数を1つずつ取り出して、偶数の値のみをnumbersリストに格納していく
numbers = [number for number in range(1,10) if number % 2 == 0]
print(numbers)
[2, 4, 6, 8]
#文字列のリスト
list_1 = ['1','2','3']
#文字列のリストlist_1から要素を1つずつ取り出して、整数にしてからリストnumbersに格納する
numbers = [int(i) for i in list_1]
print(numbers)
[1, 2, 3]
#取り出した要素が奇数ならばそのまま格納して偶数ならば2乗してから格納する
numbers = [i if i % 2 == 1 else i**2 for i in range(10)]
print(numbers)
[0, 1, 4, 3, 16, 5, 36, 7, 64, 9]
###2-2.他のデータ型からリストをつくる
####list()関数を使ったリストの作成
◯list()関数を使えば、他のオブジェクトをリストにすることができます。
#文字列をリストに変換する
list('book')
#文字列をリスト化した場合、文字の1つ1つがリストの要素となる
['b','o','o','k']
####split()関数を使ったリストの作成
◯split()関数を使えば、何らかのセパレータ文字列に基づいて、文字列を分割してリストにすることができます。
#オブジェクト birthday に中身をいれる
birthday = '29/9/1993'
#どこで分割したいかを決めて(今回はスラッシュ = /)分割する
birthday.split('/')
['9','29','1993']
###2-3.要素の取得
####[offset]を使った要素の取得
◯[offset]を使ってリストから要素を取り出すことができます。
一番左の要素のオフセットは、0であることに注意してください。
#文字列を要素に持つリストをつくる
color_list = ['Red','Yellow','Green']
#オフセットで指定したリストの要素を取得する
print(color_list[0])
print(color_list[2])
print(color_list[-1])
'Red'
'Green'
'Green'
リストの要素数が多い場合などは、リストの後ろから、-1,-2...という風にインデックスを使って、要素を指定することができます。
今回の場合では、文字列'Green'
をオフセットを使って、左から指定する場合は、color_list[2]
となり、リストの最後から負のインデックスを使って、指定する場合は、color_list[-1]
となります。
####enumerate()関数を使った要素とインデックスの取得
◯enumerate()関数を使うと、効率的に要素とインデックスを取得することができます。
#オブジェクト(変数)sに文字列を代入する
s = 'TOKYO'
#forループを使って、効率的に要素(item)とそのインデックス(offset)を取得する
for (offset,item) in enumerate(s):
print(item,' のインデックスは ',offset)
T のインデックスは 0
O のインデックスは 1
K のインデックスは 2
Y のインデックスは 3
O のインデックスは 4
#色の要素のリストをつくる
color_list = ['Red','Yellow','Green','Blue','White']
#リストから要素(文字列)とそのインデックスを取得する
for i,color in enumerate(color_list):
print(color,' は ',i,' 番目です')
Red は 0 番目です
Yellow は 1 番目です
Green は 2 番目です
Blue は 3 番目です
White は 4 番目です
####スライスを使った複数の要素の取得
◯スライスを使って複数の要素を取り出すことができます。
リストをスライスしたものもリストになります。
[start:end]
で要素を取得する場合は、オフセットでstartからend-1までの要素を取得します。("2-3.要素の更新"にスライスの詳しい説明があります。)
alphabet = ['A','B','C','D','E']
#オフセットで、0から2(3-1)の要素を取得することができます。
alphabet[0:3]
['A', 'B', 'C']
####ステップを使った複数の要素の取得
#リストの先頭から2つ分のステップ(一つおきに)で要素を取得する
alphabet[::2]
['A', 'C', 'E']
◯マイナスを使うと末尾から要素を取得することができます
#リストの末尾から2つ分のステップ(一つおきに)で要素を取得する
alphabet[::-2]
['E', 'C', 'A']
◯ステップを応用するとリストの要素を逆順にすることができます↓
#リストの要素を末尾から順に取得する
alphabet[::-1]
['E','D','C','B','A']
###2-4.要素の更新
####[オフセット]を使った要素の書き換え
#アジアの国名のリストをつくる
asian_countries = ['China','India','Japan']
#リストの左から2番目の要素に'Russia'を代入する
asian_countries[1] = 'Russia'
print(asian_countries)
####スライスを使った要素の更新
◯スライスを使えば、指定した範囲にある要素を取得して、それを置き換えることができます。
[:]
先頭から末尾までの要素を取得する
[start:]
startオフセットから末尾までの要素を取得する
[:end]
先頭からend-1オフセットまでの要素を取得する
[start:end]
startオフセットからend-1オフセットまでの要素を取得する
[start:end:step]
startオフセットから、stepごとに、end-1オフセットまでの要素を取得する。
#####[:]を使った要素の更新
◯リストを丸々更新します。
numbers = [1,2,3,4,5,6,7,8,9]
#先頭から末尾まで全ての要素を取得して、置き換えます。
numbers[:] = ['one','two','three','etc']
print(numbers)
['one','two','three','etc']
#####[start:]を使った要素の更新
◯指定した場所から末尾までの要素を置き換えます。
代入のようなイメージです。
numbers = ['one','two','three','etc']
#オフセット3から末尾までの要素を指定して置き換える
numbers[3:] = ['four','five','six']
print(numbers)
['one', 'two', 'three', 'four', 'five', 'six']
#####[:end]を使った要素の更新
◯先頭からend-1までの要素を取得して置き換えます。
numbers = [4,5,6,7,8,9]
#先頭からend-1、つまり0から-1の範囲の要素を取得して置き換えます。
#-1から0までのスペースにリスト[1,2,3]を代入するイメージです。
numbers[:0] = [1,2,3]
print(numbers)
[1,2,3,4,5,6,7,8,9]
#####[start:end]を使った要素の更新
◯オフセットで、start <= 要素 < end
の範囲を取得して、置き換えます。
numbers = [1,2,3,4,5,6,7,8,9]
#オフセットで、0から2(3-1)までの範囲の要素を取得して、置き換えます。
numbers[0:3] = ['one','two','three']
print(numbers)
['one', 'two', 'three', 4, 5, 6, 7, 8, 9]
#####[start : end : step] を使った要素の更新
◯startからend-1の範囲で、stepごとに要素を取得して置き換えます。
numbers = [1,2,3,4,5,6,7,8,9]
#オフセット2から3つおきに要素を取得して、それをリスト['three','six','nine']と置き換えます。
numbers[2::3] = ['three','six','nine']
print(numbers)
[1, 2, 'three', 4, 5, 'six', 7, 8, 'nine']
###2-5.要素の追加
####append()関数を使った要素の追加
◯末尾に要素を追加します。
#アジアの国名のリストをつくる
asian_countries = ['China','India','Japan']
#末尾に要素を追加する
asian_countries.append('Russia')
print(asian_countries)
['China', 'India', 'Japan','Russia']
####insert()関数を使った要素の追加
◯オフセットを使って、指定した場所に要素を追加します。
asian_countries = ['China','India','Japan']
#リストのオフセット2のところに文字列'Indonesia'を追加する。
asian_countries.insert(2,'Indonesia')
['China', 'India', 'Indonesia', 'Japan']
###2-6.要素の削除
####delと[オフセット]を使った要素の削除
◯del リストの名前[オフセット]という形で、指定した要素を削除します。
asian_countries = ['China','India','Indonesia','Japan']
#delはPythonの文で、代入(=)の逆のようなもの。
#delはメソッドではない
del asian_countries[2]
print(asian_countries)
['China','India','Japan']
####remove()関数を使った要素の削除
◯消したい要素がどこにあるかわからない場合などに使います。
asian_countries = ['China','India','Indonesia','Japan']
#要素を指定して削除する
asian_countries.remove('Indonesia')
print(asian_countries)
['China','India','Japan']
####pop()関数を使った要素の削除
◯リストから要素を取り出し、それと同時にその要素を削除することができます。
asian_countries = ['China','India','Indonesia','Japan']
#要素を指定して削除する
print(asian_countries.pop(2))
Indonesia
print(asian_countries)
['China','India','Japan']
###2-7.要素の並べ替え
####sort()関数を使った並べ替え
◯その場でリストをソートします。デフォルトは昇順です。文字列の場合は、アルファベット順です。
alphabet = ['A','E','D','C','B']
#並べ替える文字列は全て同じ型である必要がある
alphabet.sort()
print(alphabet)
['A', 'B', 'C', 'D', 'E']
####sorted()関数を使った並べ替え
◯リストをコピーしてそれをソートします。なのでリストのオリジナルは変更されません。
#整数と浮動小数点数は、混じっていてもソートできる
numbers = [ 2 , 1.5 , 1 , 0 , 0.5 , 2.5]
#新しいリストsorted_numbersをつくって
#numbersリストをソートしたものを代入する
sorted_numbers = sorted(numbers)
print('sorted_numbers =' , sorted_numbers)
print('numbers =' , numbers)
sorted_numbers = [0, 0.5, 1, 1.5, 2, 2.5]
numbers = [2, 1.5, 1, 0, 0.5, 2.5]
###2-8.リストのリスト
◯Pythonのリストは、Pythonオブジェクトを要素とすることができます。
なので、リストそのものも、他のリストの一要素として扱うことができます。
#国の名前のリストをつくる
asia = ['China','India','Indonesia']
americas = ['USA','Brazil','Mexico']
africa = ['Nigeria','Ethiopia','Egypt']
#リストを含むリストをつくる
countries = [asia,americas,africa,'Japan']
#リストを含むリストを表示する
print(countries)
[['China', 'India', 'Indonesia'], ['USA', 'Brazil', 'Mexico'], ['Nigeria', 'Ethiopia', 'Egypt'], 'Japan']
#オフセットでリストの中の要素を指定する
print(countries[0])
['China', 'India', 'Indonesia']
◯countriesリストの中のオフセット1の要素(americasリスト)中の、オフセット2の要素を取得します
#2段階で要素を指定する
print(countries[1][2])
Mexico
###2-9.リストの結合
####extend()関数を使ったリストの結合
◯extend()関数を使って、2つのリストを結合します。
リストの中の要素が全て1つのリストの中に入ります。
list1 = ['a','b','c']
list2 = ['d','e','f']
#2つのリストを結合して新しいリストにする
list1.extend(list2)
print(list1)
['a', 'b', 'c', 'd', 'e', 'f']
####+=を使ったリストの結合
◯**+=**を使って、2つのリストを結合します。
list_a = [1,2,3]
list_b = [4,5,6]
#2つのリストを結合して新しいリストにする
list_a.extend(list_b)
print(list_a)
[1,2,3,4,5,6]
※同じ状況で、append()を使ったら、リストが一つの要素として、他のリストに追加されます。
list_a = [1,2,3]
list_b = [4,5,6]
#リストが一要素として他のリストに追加される
list_a.append(list_b)
print(list_a)
[1,2,3,[4,5,6]]
###2-10.その他の操作
####index()関数を使ったオフセットの取得
◯要素のオフセットを知りたい場合に使います。
asian_countries = ['China','India','Indonesia','Japan']
#文字列'Japan'のオフセットを取得する
print(asian_countries.index('Japan'))
3
####inを使った値の有無のテスト
asian_countries = ['China','India','Indonesia','Japan']
#ある値がリストの中にあるかどうかを知る
print('Japan' in asian_countries)
print('Russia' in asian_countries)
True
False
####count()関数を使った、値の個数の計算
#文字列をリスト化したものを変数charactersに代入する
characters = list('personal_computer')
print(characters)
['p', 'e', 'r', 's', 'o', 'n', 'a', 'l', '_', 'c', 'o', 'm', 'p', 'u', 't', 'e', 'r']
#charactersというリストの中に 'o' がいくつ含まれているかを調べる
print(characters.count('o'))
2
####len()関数を使った長さの取得
#リストcharactersの要素の数を調べる
print(len(characters))
17
#最後に
読んでいただきありがとうございました。
次はリストについてもう少し詳しく書いていきたいと思います。
間違いや改善点などございましたら、ご指摘の程よろしくお願い致します。