2017-01-14 21 views
0

リストに文字列があるかどうかをチェックする小さな関数を書いています。そうであれば、文字列はリストから削除されます。Python str slicing out of list

これは私のコード

def str_clearer(L): 
    for i in L: 
     if i == str: 
      L.remove(i) 
     else: 
      pass 
    print(L) 
    return L 

L = [1, 2, 3, "hallo", "4", 3.3] 

str_clearer(L) 

assert str_clearer(L) == [1, 2, 3, 3.3] 

ですが、それはリストには何も行いません。
もし私がすべてのintまたはfloatで新しいListを作るようにすれば、彼は同じことを何もしません。

答えて

1

タイプチェックはisinstanceで行うことができます。これは実際にリスト内包でかなりエレガントに行うことができる:

result = [x for x in L if not isinstance(x, str)] 
2

Pythonの組み込み関数、isinstance()は、ここで使用することができます。

次のアプローチは、あなたと似ています。

In[0]: def remove_str(your_list): 
      new_list = []  
      for element in your_list: 
      if not(isinstance(element, str)): 
       new_list.append(element) 
      return new_list 

In[1]: remove_str([1, 2, 3, "hallo", "4", 3.3]) 
Out[1]: [1, 2, 3, 3.3] 

これははるかに短くてもかまいません。

In[2]: mylist = [1, 2, 3, "hallo", "4", 3.3] 
In[3]: result = [x for x in mylist if not(isinstance(x, str))] 
In[4]: print(result) 
Out[4]: [1, 2, 3, 3.3]