2016-05-21 12 views

答えて

10

all()を使用し、タイプがisinstance()であることを確認してください。 TekhenyGhemorのフォローアップの質問に答える@

>>> l = ["one", "two", 3] 
>>> all(isinstance(item, str) for item in l) 
False 
>>> l = ["one", "two", '3'] 
>>> all(isinstance(item, str) for item in l) 
True 
+0

もう1つ質問があります。数字の文字列がリストにないかどうかを確認する手段がありますか?たとえば、["one"、 "two"、 "3"]はfalseを返します。 – vkumar

+0

@TekhenyGhemor - ゼロまたは正の整数の場合はisinstance(item、str)、item.lstrip( ' - ').isdigit() 。浮動小数点数、複素数などをチェックしたい場合にはもっと複雑になります。 – TigerhawkT3

+0

@XamuelSchulman - 'all()'とジェネレータの式(リストの解説ではない)を取り除き、従来のforを作成することを意味しますか? .else'ループ?あるいは、現在のコードを複数の行に分割することを意味しますか?私はどちらかが助けになる方法を見ていない。これはすでに簡潔で明確で標準的です。 – TigerhawkT3

1

:何の数値文字列がリストにないかどうかを確認する方法があります。例:["one"、 "two"、 "3"]はfalseを返します。

はい。あなたは文字列を数値に変換し、それが例外を発生させていることを確認することができます

def isfloatstr(x): 
    try: 
     float(x) 
     return True 
    except ValueError: 
     return False 

def valid_list(L): 
    return all((isinstance(el, str) and not isfloatstr(el)) for el in L) 

チェック:[5]では

>>> valid_list(["one", "two", "3"]) 
False 

>>> valid_list(["one", "two", "3a"]) 
True 

>>> valid_list(["one", "two", 0]) 
False 

:valid_list([ "1"、 "2"、 " 3 "]) Out [5]:True

関連する問題