2014-01-23 67 views
0

我需要基於現有列表JRSTrt的內容生成一個新列表p。現有的列表:有沒有更好的方法來建立此列表

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

用於創建新的列表中的規則是:

  • 在第一輪每1在JRstrt添加一個序列號,頁。順序計數器從第一個1開始,第二個1開始,依此類推。對於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 

這種方法使我結果,我需要,但我認爲這是一個有點麻煩。作爲Python的noob,我想批評我的方法。提前謝謝了。

預期輸出[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

相關問題