2014-01-23 4 views
0

기존 목록 JRstrt의 내용을 기반으로 새 목록 p를 생성해야합니다. 기존의 목록입니다 : 새 목록을 만들기위한이 목록을 작성하는 더 좋은 방법이 있습니까

JRstrt = [1,1,0,0,1,0,1,1] 

규칙은 다음과 같습니다

  • JRstrt의 일의의 각 페이지에 일련 번호를 추가 할 첫 번째 패스에. 순서 카운터는 첫 번째 1은 1, 두 번째 1은 2 등으로 시작합니다. JRstrt의 각 0에 대해 0이 p에 추가됩니다.
  • 두 번째 단계에서 JRstrt의 0은 계속해서 기존 카운터를 사용하여 새 목록에 순차 번호를 추가합니다.

여기 내 현재 코드입니다 :

p = [] 
count = 1 
for ind in JRstrt: 
    if ind == 1: 
     p.append(count) 
     count += 1 
    else: 
     p.append(0) 


for index, object in enumerate(p): 
    if p[index] == 0: 
     p[index] = count 
     count += 1 
    else: 
     pass 

print p 

이러한 접근 방식은 나에게 내가 필요로하는 결과를 제공하지만, 나는 그것이 약간 어설픈 생각합니다. 파이썬으로 멍청한 놈이기 때문에 나는 나의 접근 방식을 비판하고 싶다. 미리 감사드립니다.

예상 출력 [1, 2, 6, 7, 3, 8, 4, 5]

+1

으로 대체하십시오. 게시물에 예제의 예상 결과를 게시 하시겠습니까? – inspectorG4dget

답변

1

이 코드와 동일한 것을 수행해야

In [42]: count = itertools.count(1) 

In [43]: p = JRstrt[:] 

In [44]: for i,num in enumerate(p): 
    ....:  p[i] = next(count) if num==1 else num 
    ....:  

In [45]: for i,num in enumerate(p): 
    p[i] = next(count) if num==0 else num 
    ....:  

In [46]: p 
Out[46]: [1, 2, 6, 7, 3, 8, 4, 5] 

작은 상기 최적화 :

p = JRstrt[:]p = [next(count) if i else i for i in JRstrt]

+0

아주 잘 작동합니다. – Ron

관련 문제