2014-02-20 5 views
0

주어진 범위에서 실행중인 ID 목록을 생성하는 기능을 만들었습니다. ID는 알파벳으로 시작하여 5 자리 숫자 (예 : A00002)로 시작됩니다. 아래의 기능은 작동하지만, 이것을 수행하는 더 깨끗한 방법이 있는지 궁금합니다. 감사!실행중인 ID 목록을 생성하는 더 깨끗한 방법

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']

+0

는 어떤 언어처럼 str.zfill 방법을 사용할 수 있습니까? -> 태그 사용 ... – DotNetDeveloper

+0

'A99999' 이후에 어떻게하고 싶니? – DSM

+0

나는 아마 시작 알파벳을 바꿀 것이다. 내 인벤토리가 ID 제한을 위반하지 않을 것이라고 생각합니다. 건배. –

답변

3

generator를 사용합니다. 이렇게하면 필요에 따라 숫자를 생성 할 수 있으며 한 번에 모두 저장할 수 없습니다. 또한 카운터의 상태 인을 유지합니다. 큰 프로젝트를 만들기 시작하고 색인에 추가하는 것을 잊어 버린 경우 유용합니다. 파이썬 프로그래밍의 매우 강력한 방법 :

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 
+0

순방향 호환성을 위해서는'next (C)'를 사용하십시오. – DSM

+0

@DSM 감사합니다. 'C.next()'는 작동하지만'next (C)'는 작동하지 않는 python 버전이 있습니까? – Hooked

+0

아, 네 말이 맞아. 예를 들어, 2.4와 2.4는 2.6에있는 것처럼 보입니다. – DSM

3

:

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

OP의 경우 : .format은 문자열 서식 지정을위한 제안 된 방법이라고 생각합니다. –

1

당신은 내장 format 방법을 사용할 수 있습니다를

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

또는이

print "A" + str(1).zfill(5) # A00001 
print "A" + str(100).zfill(5) # A00100 
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')) 
관련 문제