無限ループや IndexError: list index out of range になる


変数の値を変えて同じ動作を複数回行うなら関数を定義!

期待した動作と計画

for で「リストX(固定)とリストY(可変)の[0]を比較し、一致した場合はリストYの[0]を削除する。リストXが終わるか、リストYが空になれば終了する」という動作を作成。
カウンタと while で for の動作を2回行う。リストYは変化するので、 while の前でリスト1をリストYに代入し、 while の1回目のみリスト2をリストYに代入する。

発生した事象

何度も無限ループや IndexError: list index out of range に陥った

原因

while の中の for で while や if を複数書き、break/ continue の行先が想定外のところになっていることに気付けなかった。
リストXが終わるまでにリストYが空にならなかった場合、 while でリストXの2周目が始まってしまった。
「同じ動作を複数回行うなら for/ while でループ」だと思い込んでいた。

対策

こまめに print して期待通りの動作か確認する。
変数をの値を変えて同じ動作を複数回行うなら関数を定義する。

期待した動作ができた例

sk = list(input())
a = list(input())
b = list(input())

def compare(x):
    for s in sk:
        if s == x[0]:
            del(x[0])
            if x == []:
                break

compare(a)
compare(b)