python - 下面的python代码可以改成一行吗?#Python
问题描述
str2 = "15X8XXX6X8X"
for i in range(len(str2)):
if str2[i] == "X":
str2 = str2.replace("X", str2[i-1], 1)
print(str2)
输出结果:15588886688
用以前的值填充 X。如何简化上面的代码?如果方便的话,其他的想法更好,尽量写在一行。提前谢谢了。
解决方案
您可以使用functools.reduce
:
import functools
str2 = "15X8XXX6X8X"
print(''.join(functools.reduce(lambda s, c: s + (s[-1] if c == 'X' else c), str2)))
# Outputs 15588886688
这基本上读作“对于 中的每个字符str2
,如果当前字符'X'
与当前字符不同,则使用读取的最后一个字符构建一个字符串”。
另一种方法是使用itertools.accumulate
:
import itertools
str2 = "15X8XXX6X8X"
print(''.join(itertools.accumulate(str2, lambda s, c: c.replace('X', s[-1]))))
# Outputs 15588886688
这稍微提高了可读性,但更少的代码并不是好代码的同义词。
推荐阅读
- ios - 在 URL 获取请求中使用西里尔字符
- sql - 解析包含名称空间的 XML
- vba - 公式太长且仅适用于一个单元格
- java - 为什么新的 Integer 充当值类型 int?
- javascript - PDF到离子3中的图像
- python - Python 日志行未持久化
- azure - 是否可以使用 ARM 模板配置对 Azure Active Directory 应用程序的 api 权限
- php - 代码创建两个 MySQL 行而不是一个
- typescript - this.nav.getActiveChildNav(...).select 不是函数
- android - 无法编译 play-services-places:15.0.1