2016-05-21 12 views

Antwort

10

Verwenden Sie einfach all() und prüfen Sie auf Typen mit isinstance().

>>> 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

Noch eine Frage, gibt es eine Möglichkeit zu überprüfen, ob keine numerischen Strings in einer Liste sind. Zum Beispiel: ["eins", "zwei", "3"] würde false zurückgeben – vkumar

+0

@TekhenyGhemor - 'isinstance (item, str) und nicht item.lstrip ('-'). Isdigit()' für null oder positive ganze Zahlen . Es wird mehr involviert, wenn Sie nach Gleitkommazahlen, komplexen Zahlen usw. suchen wollen. – TigerhawkT3

+0

@XamuelSchulman - Meinen Sie, den 'all()' und den Generatorausdruck loszuwerden (kein Listenverständnis) und ein traditionelles 'für. .else' Schleife? Oder meinen Sie, den aktuellen Code in mehrere Zeilen aufzuteilen? Ich sehe nicht, wie einer von denen helfen würde. Dies ist bereits prägnant, klar und kanonisch. – TigerhawkT3

1

Answering @ TekhenyGhemor Follow-up-Frage: Gibt es eine Möglichkeit, zu überprüfen, ob keine numerischen Zeichenfolgen in einer Liste enthalten sind. Zum Beispiel: ["eins", "zwei", "3"] würde false zurückgeben

Ja. Sie können die Zeichenfolge in eine Zahl konvertieren und stellen Sie sicher, dass es eine Ausnahme auslöst:

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) 

prüfen:

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

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

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

In [5]: valid_list ([ "eins", "zwei", " drei "]) Out [5]: True

Verwandte Themen