我想知道是否可以在一行中写下以下语句:
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 ' ')
我知道不是更好或更漂亮,我只是想知道这是否可能。
我想知道是否可以在一行中写下以下语句:
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 ' ')
我知道不是更好或更漂亮,我只是想知道这是否可能。
迭代它似乎是一种过于复杂的方法。为什么不使用正则表达式?
import re
blacklist = re.compile(r'[xyz]') # Blacklist the characters 'x', 'y', 'z'
new = re.sub(blacklist, ' ', text)
你在错误的地方使用了你的内联条件(如果你没有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)
你几乎拥有它:
''.join(c if c not in blacklist else ' ' for c in text)
theX if Y else Z
本身就是一个表达式,所以你不能通过将for c in text
部分放在中间来拆分它。
使用 str 的 translate 方法。构建一个白名单字符字符串,用 ' ' 代替黑名单字符:
>>> table = ''.join(c if c not in 'axy' else ' ' for c in map(chr,range(256)))
然后用这个表调用翻译:
>>> 'xyzzy'.translate(table)
' zz '