0

次のステートメントを 1 行で記述できるかどうかを知りたいです。

new = ''
for char in text:
    if char in blacklist:
        new += ' '
    else:
        new += char

試しましたが、構文エラーが発生します:

new = ''.join(c for c in text if c not in blacklist else ' ')

私はそれが可能かどうかを知りたいだけです。

4

4 に答える 4

3

それを繰り返すのは、非常に複雑な方法のように思えます。正規表現を使用しないのはなぜですか?

import re
blacklist = re.compile(r'[xyz]') # Blacklist the characters 'x', 'y', 'z'
new = re.sub(blacklist, ' ', text)
于 2012-07-06T18:31:01.390 に答える
2

インライン条件を間違った場所で使用しています (そこに条件がなくても機能しますelse ' '。その場合、イテラブルのフィルターになるだけです)。そのままでは、次のようにします。

new = ''.join(c if c not in blacklist else ' ' for c in text)

必要に応じて、次のようにすることもできます。

new = ''.join(' ' if c in blacklist else c for c in text)
于 2012-07-06T18:26:16.383 に答える
2

あなたはほとんどそれを持っていました:

''.join(c if c not in blacklist else ' ' for c in text)

はそれ自体が表現なので、途中でX if Y else Z分けることはできません。for c in text

于 2012-07-06T18:26:25.213 に答える
0

str の translate メソッドを使用します。ブラックリストの文字の代わりに ' ' を使用して、ホワイトリストの文字列を作成します。

>>> table = ''.join(c if c not in 'axy' else ' ' for c in map(chr,range(256))) 

次に、次のテーブルで translate を呼び出します。

>>> 'xyzzy'.translate(table)
'  zz '
于 2012-07-06T18:45:12.257 に答える