61778


文字列の特定文字の配列番号を取得しようとしています。

リストの中の特定文字をfind関数で検索し、合致しない場合、-1が返り、その-1を削除しようとしておりますが、配列が [-1, -1, 8, -1,
-1]から[8,-1]となり、最終の-1が残ってしまう現象がおきています。なぜ、最後の-1が残るのか、また対処方法のご指導を頂けませんでしょうか。  
よろしくお願いいたします。

[code]

    wage_sentence = "日給 1万545円 "
    
    list_wage = []
    list_wage.append(wage_sentence.find("以上"))
    list_wage.append(wage_sentence.find("～"))
    list_wage.append(wage_sentence.find("円"))
    list_wage.append(wage_sentence.find("＋"))
    list_wage.append(wage_sentence.find("+"))
    
    
    for i in list_wage:
        if -1 in list_wage:
            list_wage.remove(-1)
       　　
    end = min(list_wage)
    
[/code]


CC BY-SA 4.0
2019-12-25T19:44:43.893
61772
2019-12-26T00:32:36.303
31870
question
python
配列の要素が適切に削除できない


処理ループを`for i in list_wage:`としたことが原因です。  
例えば以下のようにすると、`-1`,`8`,`-1`の3回しかループしていないのが分かるでしょう。

[code]

    for i in list_wage:
        print(i)
        if -1 in list_wage:
            list_wage.remove(-1)
    
[/code]

このループでやるのなら、`for`を以下のようにします。  
(@metropolisさんコメントの方法でも良いでしょう)

[code]

    for i in range(len(list_wage)):
    
[/code]

if文に相当する概念的に言えば、ループは以下の処理になるのでは？

[code]

    while -1 in list_wage:
        list_wage.remove(-1)
    
[/code]

リスト内包表記にすれば、ループ処理全体を1行で表すことも出来ます。

[code]

    list_wage = [x for x in list_wage if x != -1]
    
[/code]

参考：  
[Pythonでリスト（配列）の要素を削除するclear, pop, remove, del](https://note.nkmk.me/python-
list-clear-pop-remove-del/)


CC BY-SA 4.0
2019-12-25T23:39:38.407
61778
2019-12-26T00:32:36.303
2019-12-26T00:32:36.303
26370
26370
61772
answer