每位数字以可变基数计数

时间:2019-03-20 11:24:32

标签: python

比方说,我想在一个数字位置上具有可变基数的系统中进行计数(这在某些方面可能类似于英制测量系统)。因此,例如,我最多用三位数“ abc”来计数,其中b是x模,c是y模,a可以是无限制的,并且可以是任何数字。当“数字”计数到其基数时,它将返回零,而左侧的数字将递增1。

方便的方法是什么?当然,这应该缩放为任意数量的“数字”。 一个简单的方法是:

def count_var(n, m):

    m = m[::-1] # this is inverted for ease of iteration

    l = len(m)
    result = [0] * (l+1)
    for i in range(n):
        result[0] += 1
        for j in range(l):
            if result[j] == m[j]:
                result[j] = 0
                result[j+1] += 1

    return result[::-1]

print(count_var(719, [3,6,5]))

可以使用某些内置功能对其进行优化或自动化吗?嵌套循环看起来很慢,但是我无法将它们与任何事物进行比较。谢谢!

1 个答案:

答案 0 :(得分:1)

使用divmod代替嵌套循环

def count_var(n,m):
  r=[]
  for mi in m[::-1]:
    n,c=divmod(n,mi)
    r.insert(0,c)
  r.insert(0,n)
  return r

print(count_var(719, [3,6,5]))

Divmod基本上一次完成除法和求模