比方说,我想在一个数字位置上具有可变基数的系统中进行计数(这在某些方面可能类似于英制测量系统)。因此,例如,我最多用三位数“ 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]))
可以使用某些内置功能对其进行优化或自动化吗?嵌套循环看起来很慢,但是我无法将它们与任何事物进行比较。谢谢!
答案 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基本上一次完成除法和求模