我有一个工作函数,可以将给定字母表 A 上的整数转换为长度为 k 的字符串
def ToString(x, k, A):
"""
Args:
x (int): Integer x ∈ N
k (int) String length k >= log_N (x)
A (list) Alphabet A = {c_1, ..., c_N}
"""
S = ""
N = len(A)
for i in reversed(range(0, k)):
s_k = A[x % N]
x = x // N
S += s_k
return S
测试:
A = ['0', '1'] # Alphabet
k = 8 # length
x = 5 # the number to convert
s = ToString(x, k, A) # s = '10100000'
所以现在我基本上需要这个函数的精确逆函数,所以我可以将字符串 '10100000' 和给定的字母表转换回 5
def ToInteger(S, A):
"""
Args:
S (str): String
A (list): Alphabet
Returns:
int: Integer
"""
x = 0
for i in range(len(S)):
x = len(A) * x + len(A)-1-A.index(S[i])
return x
不幸的是,这会返回垃圾:
i = StringToInteger('10100000',['0','1']) # = 95
错在哪里?
最佳答案
尝试在你的第一个函数中使用 S = s_k + S
而不是 S += s_k
然后使用这个函数:
def toInteger(S, A):
x = 0
for i in range(len(S)):
x += (len(A) ** (len(S) - 1 - i)) * (A.index(S[i]))
return x
关于python - 将给定字母表的字符串转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43027700/