0

我刚刚做了一个函数来生成给定范围之间的运行 id 列表。ID 以字母开头,后跟 5 个数字(例如 A00002)。下面的功能有效,但我想知道是否有更清洁的方法来做到这一点。谢谢!

def running_ids(start, end):
list = []
start = int(start[1:])
end = int(end[1:])
steps = end - start

def zeros(n):
    zeros = 5 - len(str(n))
    return zeros

while start <= end:
    string = "A" + "0"*zeros(start) + str(start)
    list.append(string)
    start += 1

return list

打印 running_ids('A00001', 'A00005')

['A00001','A00002','A00003','A00004','A00005']

4

4 回答 4

3

使用发电机。这样,您可以根据需要生成数字,而不是一次存储它们。它还维护计数器的状态,如果您开始构建大型项目并且忘记将一个添加到索引中,这将非常有用。这是一种非常强大的 Python 编程方式:

def running_id():
    n = 1
    while True:
        yield 'A{0:05d}'.format(n)
        n += 1

C = running_id()
for n in xrange(5):
    print next(C)

给予:

A00001
A00002
A00003
A00004
A00005
于 2014-02-20T15:35:51.517 回答
3

您可以只使用简单的内置字符串格式:

>>> 'A%05d'%1
'A00001'
>>> 'A{0:05d}'.format(1)
'A00001'
于 2014-02-20T15:36:10.597 回答
1

您可以使用内置format方法

print "A" + format(1, "05d")   # A00001
print "A" + format(100, "05d") # A00100

或者你可以使用str.zfill这样的方法

print "A" + str(1).zfill(5)    # A00001
print "A" + str(100).zfill(5)  # A00100
于 2014-02-20T15:40:09.873 回答
0
def running_ids(start, end):
    t = start[0]
    low = int(start[1:])
    high = int(end[1:]) + 1
    res = []
    for x in range(low, high):
        res.append(t + '{0:05d}'.format(x))
    return res

print(running_ids('A00001', 'A00005'))
于 2014-02-20T15:57:44.957 回答