Python 配列型メモ

list型に関連するメソッドや知識まとめ

Pythonの配列型に関することで調べたことをメモしておくページです。 List型とは配列を扱うものになります。

List型への値のSet方法

最後に挿入したい

リストの末尾に新しい要素を追加したいときには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同士の連結

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)

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

tupleの使いどころ

定数定義や値の入れ替えをする際に用いることができます。

例えば以下のように範囲を定義する目的でrangeという最小最大の値が格納されたタプル型を用意しておくことで、後々min,maxと個別の値を取得する際にリテラルに書くことがなくなり、不具合を起こしにくくなります。

range = 1,100
min, max = range
print(min) // 1
print(max) // 100

また、ソートのときなどによくある値の入れ替えのときにも役立ち、通常temp変数を用意して、一時的に値を避難させて入れ替える行為もタプル型を用いることで簡潔に書くことができます。

// 数値の入れ替えとかに使える
a = 100
b = 200
a, b = b, a