需要明确的是,涉及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是6,932个整数的列表
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
答案 0 :(得分: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 :(得分:1)
我假设您要将列表la
整理成几个部分,以便n
:该部分的长度等于posfinList[n]
所有n
}。请确认/否认。
以下代码基于该假设,看它是否按您希望的方式工作:
lafins = []
for p in postfinList:
lafins.append( la[rosen:rosen+p] )
rosen += p
(如果la[rosen:rosen+p]
是您不熟悉的符号,您可以在Python Documentation中阅读它(它称为'切片'表示法)。您会在相关位置下找到相关位。 '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, ...]
。想想为什么会这样。