0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

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

期待した動作と計画

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)
0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?