こんにちは。
本日は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)
実行結果は以下です。
複製元 = ['赤', '青', ['黄', '橙']] 複製先 = ['赤', '青', ['黄', '橙']] 複製元 = ['赤', '青', ['黄', '橙']] 複製先 = ['赤', '青', ['黄', '橙'], '金'] 複製元 = ['赤', '青', ['黄', '橙']] 複製先 = ['赤', '青', ['黄', '橙', '淡黄'], '金']
リストのリストに淡黄を追加しても
複製元のリストは変化していません。
以上です。