2012-07-20 106 views
1

只是要清楚,有3個不同的列表涉及。 la是一個整數列表,posfinList是一個數字列表,其中來自la的每個整數應該被追加,直到它到達列表中的第一個數字,然後移動到posfinList中的下一個數字。每當我使用不同的數據時,posfinList中的數字都會改變。我想附加一個數字列表到另一個列表;使用另一個列表的附加範圍

posfinList=[83, 81, 83, 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 86, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 85, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83] 

LA是6932個整數

rosen = 0 
blos=0 
lafin = [] 
lafins=[] 


while rosen<len(la): 
    while rosen<(posfinList[blos]): 
     lafin.append(la[rosen]) 
     if rosen >=(posfinList[blos]): 
      lafins.append(lafin) 

      blos+=1 
     rosen+=1 
print lafins 
+1

問題是? – orlp 2012-07-20 17:42:37

+0

當我運行程序時,好像它正在經歷一個無限循環,所以我該如何使它正常運行 – user1541432 2012-07-20 17:53:40

回答

1

那麼它不是完全清楚你要怎樣做一個列表。你能澄清一下嗎?甚至更好,你會想到什麼輸出此輸入?:

la=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
posfinList=[2, 4, 6] 

(StackOverflow的人:是的,我知道這應該是一個評論,但我沒有爲它的名聲呢!)

但是,即使沒有澄清,我可以確認您有無限循環。如果posfinList[0]<6932,因爲它在你的例子中,那麼內部循環終止與rosen=posfinList[0]rosen無法增加或重置。外循環繼續,永不終止,導致你看到的無限循環。

1

我假設你想要的清單la剁碎成幾塊,使n:第一塊具有等於posfinList[n]所有n的長度。請確認/否認。


下面的代碼是基於這樣的假設,看看它是否你想要的方式:

lafins = [] 

for p in postfinList: 
    lafins.append(la[rosen:rosen+p]) 
    rosen += p 

(如果la[rosen:rosen+p]是陌生的符號給你,你可以看到它(這就是所謂的「你可以在'Strings'標題下找到相關位)

我大部分都使用和你一樣的變量名,儘管它們並不全是描述性的。花時間選擇實際記錄變量通常在測試和調試時所獲得的收益的變量名稱,更不用說有助於確保您自己知道這些變量意味着什麼。


至於你的原代碼,至少有三個問題:

  • if rosen >=(posfinList[blos])的東西永遠不會執行。 if本身包含在while rosen<(posfinList[blos])中,這實際上確保rosen>=(postfinList[blos])在其內部永遠不會是真實的。

  • while rosen<(posfinList[blos])退出(除非巧合rosen>=len(la)),while rosen<len(la)將進入一個無限循環:rosen將始終小於len(la)。這兩個值都不會再次改變,所以while條件將始終爲真。

  • 這個人是難以解釋的,所以我只是要這樣說:你的循環工作,在你給的例子情況下,postfinList[83, 164, 247, 329, ...]而不是[83, 81, 83, 82, ...],也就是說,它應該是[83, 83+81, 83+81+83, 83+81+83+82, ...] 。想想爲什麼。

相關問題