我是 Python 的新手,所以也许我要求一些非常简单的东西,但我无法以 Python 的方式思考问题。
我有一个压缩字符串。这个想法是,如果一个角色重复 4-15 次,我会做出这样的改变:
'0000' ---> '0|4'
如果超过 15 次,我使用斜线和两位数字来表示数量(使用十六进制值):
'00...(16 times)..0' ---> '0/10'
所以,习惯了其他语言,我的方法如下:
def uncompress(line):
verticalBarIndex = line.index('|')
while verticalBarIndex!=-1:
repeatedChar = line[verticalBarIndex-1:verticalBarIndex]
timesRepeated = int(line[verticalBarIndex+1:verticalBarIndex+2], 16)
uncompressedChars = [repeatedChar]
for i in range(timesRepeated):
uncompressedChars.append(repeatedChar)
uncompressedString = uncompressedChars.join()
line = line[:verticalBarIndex-1] + uncompressedString + line[verticalBarIndex+2:]
verticalBarIndex = line.index('|') #next one
slashIndex = line.index('/')
while slashIndex!=-1:
repeatedChar = line[slashIndex-1:slashIndex]
timesRepeated = int(line[slashIndex+1:verticalBarIndex+3], 16)
uncompressedChars = [repeatedChar]
for i in range(timesRepeated):
uncompressedChars.append(repeatedChar)
uncompressedString = uncompressedChars.join()
line = line[:slashIndex-1] + uncompressedString + line[slashIndex+3:]
slashIndex = line.index('/') #next one
return line
我知道这是错误的,因为字符串在 Python 中是不可变的,并且我一直在更改行内容,直到没有 '|' 或“/”存在。
我知道 UserString 存在,但我想有一种更简单、更 Pythonish 的方式来做这件事,这将是很好的学习。
有什么帮助吗?