我正在尝试用Python编写代码来解码游程编码。例如:
print(decode(a3b3c3))
会返回:
aaabbbccc
但是,如果我为数量输入两位数字,则:
a10b3c2
它抛出一个字符串索引错误
我该如何修正我的代码,使其接受除一位数字以外的数字?
def decode(text):
if not text:
return ""
else:
char, no, i = text[0], int(text[1]), 1
i+=1
return char*no + decode(text[i:])
print(encode(a10b2c3))
答案 0 :(得分:0)
您正在尝试使用数字索引解析字符串,这从来都不是一个好主意。如果数字有3或4位数字怎么办?使用正则表达式的最佳方法,例如:
aaaaaaaaaabbccc
打印:
import pandas as pd
import numpy as np
rands = np.random.random(7)
days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
dates = pd.date_range('2018-01-01', '2018-01-07')
df = pd.DataFrame({'date': dates, 'days': days, 'y': rands})
df_days_onehot = pd.get_dummies(df.days)[days]
df[days] = df_days_onehot
df['target'] = df.y.shift(-1)
df.drop('days', axis=1, inplace=True)
df.set_index('date', inplace=True)
X = df.iloc[:, :-1].values
y = df.iloc[:, -1].values
答案 1 :(得分:0)
您可以使用more_itertools.run_length.decode()
。
给予
import more_itertools as mit
compressed = [(char, int(n)) for char, n in mit.sliced("a3b3c3", 2)]
代码
"".join(mit.run_length.decode(compressed))
# 'aaabbbccc'
详细信息
compressed
值只是将输入准备为(字符,数字)对,这是此特定API所必需的。
compressed
# [('a', 3), ('b', 3), ('c', 3)]
more_itertools
是第三方库。通过λ pip install more_itertools