なんだかGoodVibes

日々の勉強メモです。

【Python】リストの基本操作 メソッド色々

こんにちは。
本日はPythonメモです。

インデックスの取得

index()

index()を使用します。
要素をリストから検索して
インデックスを返します。

items = ['赤', '青', '黄', '黒', '白']
print(items.index('黄'))

実行結果は以下です。

2

検索する要素に存在しないものを指定するとエラーとなります。

print(items.index('橙'))
→ValueError: '橙' is not in listとなる


リストの要素変更(追加、削除)

append()

リストの一番うしろに要素を追加します。

items = ['赤', '青', '黄', '黒', '白']
items.append('銀')
print(items)

実行結果は以下です。

['赤', '青', '黄', '黒', '白', '銀']
insert()

次に、追加する場所を指定して要素を追加します。
第1引数に追加するインデックス、第2引数に追加する要素を指定します。

items = ['赤', '青', '黄', '黒', '白']
items.insert(2, '橙')
print(items)

実行結果は以下です。

['赤', '青', '橙', '黄', '黒', '白']
remove()

リストから要素を削除します。

items = ['赤', '青', '黄', '黒', '白']
items.remove('黄')
print(items)

実行結果は以下です。

['赤', '青', '黒', '白']

存在しない要素を指定するとエラーとなるので注意です。

items = ['赤', '青', '黄', '黒', '白']
items.remove('色')
→ValueError: list.remove(x): x not in list


リストのコピー

リスト(ミュータブルなオブジェクト)は
呼び出し先の関数で値を変更した場合、
呼び元も変更します。

colorItems = ['赤', '青', ['黄', '橙']]
print(colorItems)
changeItem(colorItems, '金')
print(colorItems)

def changeItem(items, color):
    items.append(color)

実行結果は以下です。

['赤', '青', ['黄', '橙']]
['赤', '青', ['黄', '橙'], '金']

これを回避するためにcopyもしくはdeepcopyを使用します。

copy()

リストをコピーします。
copy()の場合、リストを複製しますが、
リストに含まれているリストは複製されません。

colorItems = ['赤', '青', ['黄', '橙']]
copyItems = colorItems.copy()
print('複製元 = ', colorItems)
print('複製先 = ', copyItems)

changeItem(copyItems, '金')
print('複製元 = ', colorItems)
print('複製先 = ', copyItems)

addItem(copyItems, '淡黄色')
print('複製元 = ',colorItems)
print('複製先 = ', copyItems)

-----------------------------
def changeItem(items, color):
    items.append(color)

def addItem(items, color):
    items[2].append(color)
複製元 =  ['赤', '青', ['黄', '橙']]
複製先 =  ['赤', '青', ['黄', '橙']]

複製元 =  ['赤', '青', ['黄', '橙']]
複製先 =  ['赤', '青', ['黄', '橙'], '金']

複製元 =  ['赤', '青', ['黄', '橙', '淡黄']]
複製先 =  ['赤', '青', ['黄', '橙', '淡黄'], '金']

淡黄を追加した際に、複製元のリストも変化してしまっています。
これを回避するにはdeepcopyを使用します。

deepcopy()

リストに含まれているリストも複製が可能です。
使用する場合は、copyをimportする必要があります

colorItems = ['赤', '青', ['黄', '橙']]
dcopyItems = copy.deepcopy(colorItems)
print('複製元 = ', colorItems)
print('複製先 = ', dcopyItems)

changeItem(dcopyItems, '金')
print('複製元 = ',colorItems)
print('複製先 = ', dcopyItems)

addItem(dcopyItems, '淡黄')
print('複製元 = ',colorItems)
print('複製先 = ', dcopyItems)

-----------------------------
def changeItem(items, color):
    items.append(color)

def addItem(items, color):
    items[2].append(color)

実行結果は以下です。

複製元 =  ['赤', '青', ['黄', '橙']]
複製先 =  ['赤', '青', ['黄', '橙']]

複製元 =  ['赤', '青', ['黄', '橙']]
複製先 =  ['赤', '青', ['黄', '橙'], '金']

複製元 =  ['赤', '青', ['黄', '橙']]
複製先 =  ['赤', '青', ['黄', '橙', '淡黄'], '金']

リストのリストに淡黄を追加しても
複製元のリストは変化していません。



以上です。