检查变量是否为列表推导中的字符串

时间:2016-09-20 20:33:47

标签: python list-comprehension

我有一个清单:

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

2 个答案:

答案 0 :(得分:1)

if次迭代的for子句应该在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)]

答案 1 :(得分: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']