谜语:
返回给定字符串的一个版本,其中对于字符串中的每个星号(*),该星号及其左右两侧的字符都将消失。所以“ab*cd”产生“ad”,而“ab**cd”也产生“ad”
我想知道是否有一种pythonish方法可以改进这个算法:
def starKill(string):
result = ''
for idx in range(len(string)):
if(idx == 0 and string[idx] != '*'):
result += string[idx]
elif (idx > 0 and string[idx] != '*' and (string[idx-1]) != '*'):
result += string[idx]
elif (idx > 0 and string[idx] == '*' and (string[idx-1]) != '*'):
result = result[0:len(result) - 1]
return result
starKill(“wacy*xko”)收益率
以下是一个有趣的numpy解决方案:
不确定它是否是“Pythonic”,但这个问题可以用正则表达式解决
对于那些不熟悉正则表达式的人,我将把这个长字符串分解为:
前缀
这指定我们希望替换的部分以任何字符的0或1开头。如果星星前面有一个字符,我们要替换它;否则,如果星号位于输入字符串的最开头,我们仍然希望表达式命中
明星
这指定表达式中间必须包含星号字符,但也可以包含多个星号字符。例如,“a****b”仍然会流行,即使有四颗星。我们需要在星号之前加一个反斜杠,因为正则表达式将星号作为保留字符,而在之前加一个反斜杠,因为Python字符串保留反斜杠字符
后缀
与前缀相同。表达式可以以任意字符的一或零结尾
希望有帮助
正则表达式
相关问题 更多 >
编程相关推荐