检查,如果变量是字符串列表理解

问题描述:

我有一个列表:检查,如果变量是字符串列表理解

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

你在错误的顺序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'] 

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