python中的游程编码
我有家庭作业要用python进行运行长度编码,我写了一段代码,但这是我不想要的。它只打印字符串,就像他写的一样,但我希望它打印字符串,如果任何字符在这个字符串中超过一次,它将只打印字符一次,并在它附近打印字符在字符串中出现的次数。我该怎么做 例如: 字符串:“lelamfaf” 结果是:'l2ea2mf2python中的游程编码,python,Python,我有家庭作业要用python进行运行长度编码,我写了一段代码,但这是我不想要的。它只打印字符串,就像他写的一样,但我希望它打印字符串,如果任何字符在这个字符串中超过一次,它将只打印字符一次,并在它附近打印字符在字符串中出现的次数。我该怎么做 例如: 字符串:“lelamfaf” 结果是:'l2ea2mf2 def encode(input_string): count = 1 prev = '' lst = [] for chara
def encode(input_string):
count = 1
prev = ''
lst = []
for character in input_string:
if character != prev:
if prev:
entry = (prev, count)
lst.append(entry)
#print lst
count = 1
prev = character
else:
count += 1
else:
entry = (character, count)
lst.append(entry)
return lst
def decode(lst):
q = ""
for character, count in lst:
q += character * count
return q
def main():
s = 'emanuelshmuel'
print decode(encode(s))
if __name__ == "__main__":
main()
三点意见:
对于encode函数,应该使用现有的方法str.count。
解码功能将打印字符的计数倍,而不是字符及其计数器的计数倍。
实际上,decodeCodeString组合是一个编码函数,因为您不会从编码结果中检索起始字符串。
以下是工作代码:
def encode(input_string):
characters = []
result = ''
for character in input_string:
# End loop if all characters were counted
if set(characters) == set(input_string):
break
if character not in characters:
characters.append(character)
count = input_string.count(character)
result += character
if count > 1:
result += str(count)
return result
def main():
s = 'emanuelshmuel'
print encode(s)
assert(encode(s) == 'e3m2anu2l2sh')
s = 'lelamfaf'
print encode(s)
assert(encode(s) == 'l2ea2mf2')
if __name__ == "__main__":
main()
很快就想到了这一点,可能还有优化的空间,例如,如果字符串太大,并且有足够的内存,那么最好使用原始字符串的一组字母进行查找,而不是使用字符列表本身。但是,这项工作是否相当有效:
text = 'lelamfaf'
counts = {s:text.count(s) for s in text}
char_lst = []
for l in text:
if l not in char_lst:
char_lst.append(l)
if counts[l] > 1:
char_lst.append(str(counts[l]))
encoded_str = ''.join(char_lst)
print encoded_str
请把你的凹痕修好你的凹痕还是破的。你能修好吗?这是几秒钟