首页 > 解决方案 > 下面的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。如何简化上面的代码?如果方便的话,其他的想法更好,尽量写在一行。提前谢谢了。

标签: python

解决方案


您可以使用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

这稍微提高了可读性,但更少的代码并不是好代码的同义词。


推荐阅读