现在可以使用:
for x in clean_spaces:
final_qry = final_qry.replace(x, ' ')`
clean_spaces
是正则表达式组提取的多字符空白值(\s\s+)
的列表,这些值将在输出字符串中用单个空格替换。
final_qry
是通过其他操作修改的SQL查询。
我希望有一个更简洁的单行语句,如下所示:
final_qry = (final_qry.replace(x, ' ') for x in clean_spaces)
但是,当尝试使用它和它之后的类似语句时,出现以下错误:
AttributeError: 'generator' object has no attribute 'replace'
是否有一种方法可以将for ... in ...:... \ n ... [action]语句合并为一行而不会出现此错误?
答案 0 :(得分:0)
之后
final_qry =(final_qry.replace(x,'')for clean_spaces中的x)
final_qry
不再是以前的SQL查询,而是生成器表达式。
考虑一下此会话(简化):
$ python
>>> clean_spaces="cd"
>>> final_qry="abcdefg"
>>> final_qry
'abcdefg'
>>> final_qry = (final_qry.replace(x, ' ') for x in clean_spaces)
>>> final_qry
<generator object <genexpr> at 0x7f85d2828960>
>>> list(final_qry)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <genexpr>
AttributeError: 'generator' object has no attribute 'replace'
我认为您将无法通过这种方式解决您的问题。使用@laylog提出的解决方案:
final_qry = reduce((lambda x, y: x.replace(y, ' ')), clean_spaces, final_qry)