pythonでリストで最初の方に文字列があるときにその部分を削除したい


python3.5を使っています。例えば["a","b",1,2,3]というリストがあったときに、[1,2,3]というリストに直したいです。下は、試しに書いてみたコードです。

[code]

    list1=["a","b",1,2,3]
    
    
    list_number=False
    while list_number==True:
        try:
            float(list1[0])
            list_number=True
        except:
            list1=list1[1:]
            list_number=False
    
    print(list1)
    
[/code]

これでlist1が[1,2,3]に変換されると思ったのですが、変わりませんでした。どうすればよいのでしょうか。



[code]

    list1=["a","b",1,2,3]
    
[/code]

として、要件を満たす最も簡潔な方法は、下記のような記述でしょう。

[code]

    [x for x in list1 if type(x) is not str] #=>[1,2,3]
    
[/code]

各要素のうち、文字列型でないものを抽出できます。  
他の言語においてはfilterとか言われているリスト操作ですが、pythonでは上記のようにリスト内包表記にifを用いることでフィルタリングを簡単に実行できます。  
またpythonは値自体が型をもっているのでそれ(str型)を利用したほうが、floatにキャストして例外処理を行うよりも好ましいと思います。



[code]

    list1=["a","b",1,2,3]
    
[/code]

として、要件を満たす最も簡潔な方法は、下記のような記述でしょう。

[code]

    [x for x in list1 if type(x) is not str] #=>[1,2,3]
    
[/code]

各要素のうち、文字列型でないものを抽出できます。  
他の言語においてはfilterとか言われているリスト操作ですが、pythonでは上記のようにリスト内包表記にifを用いることでフィルタリングを簡単に実行できます。  
またpythonは値自体が型をもっているのでそれ(str型)を利用したほうが、floatにキャストして例外処理を行うよりも好ましいと思います。

