python - 单行字符串迭代器;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] 语句变成一行而不会出现此错误?
解决方案
后
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)
推荐阅读
- javascript - 在多语言 Dropdows Jquery 代码中出现错误
- twig - Drupal 8 如何给下拉链接上课?
- apache-spark - 没有足够的空间在内存中缓存 Dataframe
- .net - .NET Core Entity Framework 保存空间地理数据类型 SQL Server
- arrays - Swift:如何替换数组中的大写符号
- javascript - 如何在 amp-mustache 模板变量中使用 toLowerCase 方法
- java - 哪个测试卡号在印度被条纹使用?
- php - 密钥存在时如何解决“未定义索引”错误?
- python - 只有当它是基类时,如何让类中的代码运行?
- elasticsearch - 弹性搜索列出具有时间范围的匹配条件的所有键