2016-09-20 2 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を使用して/を交換し、その場合の要素をスキップしたいと思います文字列ではありません。私がre.subを実行する前にxが文字列であるかどうかをチェックするために、このリストの理解の中で文法的に間違っているのは何ですか?

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のために得る

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

を試してみて、for反復で

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

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)] 
関連する問題