Pythonの配列型に関することで調べたことをメモしておくページです。 List型とは配列を扱うものになります。
リストの末尾に新しい要素を追加したいときにはappend()を用いることで可能です。
list = [1, 2, 3, 4, 5] list.append(6) // [1, 2, 3, 4, 5, 6]
insert()を用いることで指定した箇所に値を挿入することができます。
list = [1, 2, 3, 4, 5, 6] list.insert(3, 7) // [1, 2, 3, 7, 4, 5, 6]
Pop()を使うことでList型の最後の値を削除することができる。 この関数は戻り値に削除した値を返します。
list = [1, 2, 3, 7, 4, 5, 6] res = list.pop() // [1, 2, 3, 7, 4, 5] print(res) // 6 // pop(X)と指定すればそこを取り出せる list.pop(0) // 1
delを用いることで削除が可能となっています。 以下サンプルのように添え字で要素のインデックスを指定してあげることで、その要素を削除可能ですが、 添字指定を忘れてしまうと配列そのものが消えてしまうので注意が必要です。
list = [1, 2, 3, 7, 4, 5] del list[2] // [1, 2, 7, 4, 5]
remove()関数を用いることで指定した値を削除することができます。 もし指定した値がない場合はエラーとなります。
list = [1, 2, 7, 4, 5] list.remove(7) // [1, 2, 4, 5] list.remove(7) // ValueError: list.remove(x): x not in list
List同士の連結は加算するときのように+=で記述することが可能です。 もしくは片方のリストに対してextend()することでの連結方法もあります。
li1 = [1, 2, 3] li2 = [4, 5, 6] li1 += li2 print(li1) // [1, 2, 3, 4, 5, 6] li1.extend(li2) // [1, 2, 3, 4, 5, 6]
index()関数を用いることで指定した値が何番目の要素であるかを返してくれる。
li = [1, 2, 3, 4, 5] li.index(3) // 2
count()関数を用いることで指定した検索値がListの中にいくつあるかを返してくれる。
li = [1, 2, 3, 4, 5, 3, 3, 5] li.count(3) // 3
if 検索値 in listの形式でif文判定を書くことで、 Listの中に検索値があればTrue、無ければFalseを返す制御が書くことができる。
li = [1, 2, 3, 4, 5, 3, 3, 5] if 2 in li print('exist')
Listの中をソートすることができます。その方法は様々であり、以下のような方法があります。
li = [2, 3, 1, 4, 5, 3, 3, 5] // 通常のソート li.sort() // [1, 2, 3, 3, 3, 4, 5, 5] // 降順 li.sort(reverse=True) // [5, 4, 3, 3, 3, 2, 1] // 反転 li = [2, 3, 1, 4, 5, 3, 3, 5] li.reverse() // [5, 3, 3, 5, 4, 1, 3, 2]
以下のように文章が入ったstring型の変数を指定した値で切り分けて、Listの要素として詰めることができます。
word = 'My name is' word.split(' ') // ['My', 'name', 'is']
上記とは逆でListの中にある要素を指定した値で連結して新しい値として扱うことも可能です。
word = ['My', 'name', 'is'] word1 = ' '.join(word) print(word1) // My name is
要素に1,2,3,4が入ったList型変数"i"を用意します。 そしてj = iとiの中身をjに入れます。 ここでjの要素に対して値の変更を行います。(j[0] = 100) 直感的にはここでiの値を出力すると、初期化のタイミングで格納した[1,2,3,4]が出力されるように感じますが、 タイトルにもあるようにList型は参照渡しとなるため、結果は[100,2,3,4]となります。
実際にそのListのアドレスをid()関数で表示させてみるとiもjも同じ場所を示しているのがわかります。
i = [1,2,3,4] j = i j[0] = 100 print(i) // [100,2,3,4] // id()でアドレス的なものを知ることができる id(i) // 2308790429248 id(j) // 2308790429248
参照渡しを避けて、リスト型や辞書型変数を扱う方法は、一般的にcopy()関数を使います。 もしくは書式list[start:end]の形で場所指定でコピーすることができます。
i = [1,2,3,4] j = copy(i) j = i[:]
tuple型変数とは新しく値を代入することが出来ない配列のようなものです。
書き方はリスト型は角括弧[]だったところを丸括弧()にするだけです。タプル型もリスト型で使うことが出来た関数類は同様に使用できます。
タプル型は値を書き換えることが出来ないので、t1[2]=2のように記述するとエラーとなりますが、タプル型の中にある配列等に対するアクションは受け付けるので、t2[0][0]=100はエラーとならず、出力すると([100,2,3], [4,5,6])となります。
t1 = (1,2,3,4,5,6) // リスト型のときに使えた関数を持っている t1[2] // 3 t1.index(4) // 3 t2=([1,2,3], [4,5,6]) t2[0][0] = 100
定数定義や値の入れ替えをする際に用いることができます。
例えば以下のように範囲を定義する目的でrangeという最小最大の値が格納されたタプル型を用意しておくことで、後々min,maxと個別の値を取得する際にリテラルに書くことがなくなり、不具合を起こしにくくなります。
range = 1,100 min, max = range print(min) // 1 print(max) // 100
また、ソートのときなどによくある値の入れ替えのときにも役立ち、通常temp変数を用意して、一時的に値を避難させて入れ替える行為もタプル型を用いることで簡潔に書くことができます。
// 数値の入れ替えとかに使える a = 100 b = 200 a, b = b, a