2016-05-21 59 views

回答

10

只需使用all()並檢查類型與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

還有一個問題,有沒有辦法檢查列表中是否沒有數字字符串。例如:[「one」,「two」,「3」]將返回false – vkumar

+0

@TekhenyGhemor - isinstance(item,str)而不是item.lstrip(' - ')。isdigit()'爲零或正整數。如果你想檢查浮點數,複數等,它會變得更加複雜。 – TigerhawkT3

+0

@XamuelSchulman - 你的意思是擺脫'all()'和生成器表達式(不是列表理解)並創建一個傳統的'for。 .else'循環?或者你的意思是把當前的代碼分解成多行?我不明白這些如何幫助。這已經是簡潔明瞭的規範。 – TigerhawkT3

1

回答@ TekhenyGhemor的後續問題:有沒有一種方法來檢查列表中是否沒有數字字符串。例如:[「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) 

檢查:

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

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

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

在文獻[5]:valid_list([ 「一」, 「二」,「三個]]) 輸出[5]:真

相關問題