Pythonプログラミングで

リストのメモ

目次

要素

リストに格納されている値一つ一つ

語彙

インデックス

リストの中で要素を格納している場所を表す番号。必ず 0 から始まる整数。

ミュータブル

Python の list 型はミュータブルと言って書き換えが可能です。「いや、書き換えられるのは当たり前じゃん」と思うかもしれませんが、おそらくこの説明をご覧になっている方は誤解なさっていると思いますので、しっかり確認していきましょう。

まず、パイソンにおいてリスト型の変数を代入するというのは、変数の値ではなく変数を格納しているコンピューター上の部屋番号(参照)を渡しているんです。まあ正確にいうと、「ミュータブルの変数は参照を渡し、イミュータブルの変数は値を渡す」という言い方をするんですが。リストの場合、代入はすべて参照渡しです。

これだとよくわからないので具体例をみてみましょう。L = [1, 3] というリストがまずあるとします。新しく M というリストを宣言して M = L と代入したあとで、M に操作を加えて、例えば 3 を削除したら、どうなると思います?実は L でも 3 が削除されてしまうんですわ、これが。

UNAVAILABLE

じゃあ L の中身は残しておきたいと思ったときどうすればいいか。そのとき使うのが copy.deepcopy です。まあ 1 次元リストなら copy.copy でもいいんですが、こっちさえ覚えとけばってのは deepcopy の方ですね。M = copy.deepcopy(L) をやっとけば、M をいじっても L にはなんの支障もありません。ね、便利でしょ。

「じゃあ int や str はどうなんだよ」とお思いでしょう。str についてはこちらで解説しておりますから、int を例にあげましょうか。x = 1と int 型の変数を宣言したとします。x に格納されているのは 1 という値そのものです。したがって

                    
x = 1

def increase(a):
    a += 1
    return a

y = increase(x)
print('{}, {}'.format(x, y))
                    
                

としたときに y に代入されるのは increase(1) です。increase の引数はあくまで 1 であり、x の参照ではありません。ですから結果は当然

1, 2

となります。比較のためにこれも実行してみましょう。

                    
x = [1]

def increase(a):
    a[0] += 1
    return a[0]

y = increase(x)
print('{}, {}'.format(x, y))
                    
                

x がリストになりました。リストは参照渡しでしたよね。ですから increase の引数は

リストの参照

ですよ。したがって increase 内部では x がマジで変更されています。したがって結果は

[2], 2

となります。

各種メソッド

append()

リストの最後尾に引数を付け加える。

                    
li = ['A', 'b', '©']
li.append('d')
print(li)
                    
                

['A', 'b', '©', 'd']

remove()

リストから指定された要素を削除する。同じ値が複数含まれる場合は最初だけ削除される。

                    
li = ['Alice', 'David', 'Bob', 'Charles', 'David']
li.remove('David')
print(li)
                    
                

['Alice', 'Bob', 'Charles', 'David']