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 是 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
4

2 回答 2

1

好吧,您要做什么并不完全清楚。你能澄清一下吗?或者更好的是,您希望此输入的输出是什么?:

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

(StackOverflow 人:是的,我知道这应该是一个评论,但我还没有这方面的声誉!)

但是,即使没有澄清,我也可以确认您有一个无限循环。如果posfinList[0]<6932就像在您的示例中那样,则内部循环以终止rosen=posfinList[0]并且rosen无法增加或重置。外部循环继续并且永远不会终止,从而导致您看到的无限循环。

于 2012-07-23T01:37:29.547 回答
1

我假设您想将列表la分成几部分,以便n:th 部分的长度等于posfinList[n]all n。请确认/拒绝。


以下代码基于该假设,看看它是否按您想要的方式工作:

lafins = []

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

(如果la[rosen:rosen+p]您不熟悉符号,您可以在Python 文档中阅读它(称为“切片”符号) 。您会在“字符串”标题下找到相关位。)

我大多使用与您相同的变量名,尽管它们并不是那么具有描述性。在测试和调试时,花时间选择实际记录变量作用的变量名称通常会带来可观的回报,更不用说有助于确保您自己知道这些变量的用途。


至于你的原始代码,至少存在三个问题:

  • 里面的东西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, ...]。想想为什么会这样。

于 2012-07-23T11:48:10.597 回答