2012-07-20 105 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, ...] 。想想为什么。

相关问题