一种生成运行ID列表的更简洁方法

时间:2014-02-20 15:28:03

标签: python generate-series

我刚刚创建了一个函数来生成给定范围之间的运行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

print running_ids('A00001','A00005')

  
    
      

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

    
  

4 个答案:

答案 0 :(得分:3)

使用generator。这样您就可以根据需要生成数字,而不是一次性存储它们。它还维护计数器的状态,如果您开始构建大型项目并且忘记在索引中添加一个项目,则非常有用。这是一种非常强大的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

答案 1 :(得分:3)

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

>>> 'A%05d'%1
'A00001'
>>> 'A{0:05d}'.format(1)
'A00001'

答案 2 :(得分: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

答案 3 :(得分: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'))