如何在Python中递增数字字符串 '0000000001'?

8 投票
7 回答
19876 浏览
提问于 2025-04-18 04:05

我有一个函数叫做 getNextSeqNo()。我希望每次调用这个函数的时候,它能把一个数字字符串加一,比如从 0000000000 变成 0000000001,然后再变成 0000000002。我该怎么做呢?

我已经这样写了:

def __init__(self) :
    self.seq = '0000000000'

def getNextSeqNo(self) :
    self.seq = str(int(self.seq) +1)
    return(self.seq)

但是我得到的输出是 1,而不是 0000000001

7 个回答

1

你应该把当前的数字值存储为一个 int 类型,而不是字符串,然后根据需要动态生成字符串。

>>> i = 0
>>> "{0:010d}".format(i)
'0000000000'

>>> i += 1
>>> "{0:010d}".format(i)
'0000000001'

把数字值存成字符串形式只是因为你想这样展示(或者在某些需要字符串的地方使用),这其实是个坏主意。

这样的话,getNextSeqNo 就变成这样:

def getNextSeqNo(self):
    ret = "{0:010d}".format(self._seq_i)
    self._seq_i += 1
    return ret
3

这里有很多答案。再给你一个:

import string
seq = 1
string.zfill(seq, 10)
# '0000000001'
# works with strings too:
string.zfill('00001', 10)
# '0000000001'

或者

seq = 1
str(seq).zfill(10)
# '0000000001'

注意,string.zfill 这个函数直接接受一个整数作为参数。

4

format() 来格式化你的数字:

self.seq = format(int(self.seq) + 1, '010d')

更好的方法是,不要存储字符串,而是存储一个整数,然后返回格式化后的版本:

def __init__(self):
    self.seq = 0

def getNextSeqNo(self):
    self.seq += 1
    return format(self.seq, '010d')

使用 010d 格式化会把你的整数输出为一个长度为10的字符串,前面用0填充:

>>> format(0, '010d')
'0000000000'
>>> format(42, '010d')
'0000000042'
6

最快最简单的方法,虽然不一定是最清晰的:

str(int('9' + self.seq) + 1)[1:]

这个方法的原理是,在转换成整数之前,先在前面加一个数字,这样可以保留所有的前导零。然后在转换回字符串后,再把那个加上的数字去掉。这个方法的好处是,你不需要提前知道需要多少位数字。

9

你可以把这个字符串转换成一个整数,然后用类似下面的代码:

self.seq = '%010d' % (int(self.seq) + 1)
return self.seq

如果你不需要 self.seq 是一个字符串的话,你可以这样做:

def __init__(self) :
    self.seq = 0

def getNextSeqNo(self) :
    self.seq += 1
    return '%010d' % self.seq

撰写回答