检查,如果变量是字符串列表理解
问题描述:
我有一个列表:检查,如果变量是字符串列表理解
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
答
你在错误的顺序if
和for
条款 - 该条款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)]
http://stackoverflow.com/q/25831506/2301450 – vaultah