2016-09-20 38 views
-1

我有一個列表:檢查,如果變量是字符串列表理解

v = ['4/29/2016 8:25:58 AM', '5/25/2016 2:22:22 PM', 'True', 'Foo', 1, '4/20/1969 4:19:59 PM']

,我想通過所有的項目的迭代,用re.sub-更換/,並跳過,如果它的元素不是一個字符串。我在做什麼語法錯誤在這個列表中的理解,以檢查是否x是一個字符串之前運行我的re.sub

blah = [ re.sub("/", '-', x) if isinstance(x, str) for x in v ]

錯誤輸出:

blah = [ re.sub("/", '-', x) if isinstance(x, str) for x in v ] 
                 ^
SyntaxError: invalid syntax 

Process finished with exit code 1 
+0

http://stackoverflow.com/q/25831506/2301450 – vaultah

回答

0

你在錯誤的順序iffor條款 - 該條款for而來的if子句之前。嘗試

blah = [ re.sub("/", '-', x) for x in v if isinstance(x, str) ] 

然後我得到了blah

['4-29-2016 8:25:58 AM', 
'5-25-2016 2:22:22 PM', 
'True', 
'Foo', 
'4-20-1969 4:19:59 PM'] 
0

for迭代if條款應來後for

>>> blah = [re.sub("/", '-', x) for x in v if isinstance(x, str)] 
>>> blah 
['4-29-2016 8:25:58 AM', '5-25-2016 2:22:22 PM', 'True', 'Foo', '4-20-1969 4:19:59 PM'] 

而在你的情況,因爲它是一個簡單的替換你不需要使用re.sub()。改爲使用str.replace()

>>> blah = [x.replace('/', '-') for x in v if isinstance(x, str)] 
相關問題