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
这稍微提高了可读性,但是代码少并不等于好代码。