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リストをいくつかの断片に切り刻んで、 :th 断片の長さがfor allnに等しいと仮定しています。確認/拒否してください。posfinList[n]n


次のコードはその仮定に基づいています。希望どおりに動作するかどうかを確認してください。

lafins = []

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

( の表記法に慣れていない場合は、 Python ドキュメントla[rosen:rosen+p]でそれについて読むことができます (「スライス」表記法と呼ばれます) 。関連するビットは、「Strings」ヘッダーの下の少し下にあります。)

それほど説明的ではありませんが、私はほとんどあなたと同じ変数名を使用しました。変数が何をするのかを実際に説明する変数名を選択するのに時間をかけることは、テストとデバッグの際に一般的にかなりの効果をもたらします。


元のコードに関しては、少なくとも 3 つの問題があります。

  • 内部のもの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条件は常に true になります。

  • これは説明するのが難しいので、私はこれを言うつもりです: あなたのループが機能するためには、あなたが与えた例のケースでは、の代わりに、つまり、 である必要があり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 に答える