首页 > 解决方案 > 单行字符串迭代器;AttributeError:“生成器”对象没有“替换”属性

问题描述

现在这有效:

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] 语句变成一行而不会出现此错误?

标签: pythonpython-3.x

解决方案


final_qry = (final_qry.replace(x, ' ') for x in clean_spaces)

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)

推荐阅读