2009-07-08 11 views
0

これは私の問題です。リストをPythonで再割り当て

for i in big_list: 
    del glist[:] 

    for j in range(0:val) 
     glist.append(blah[j]) 

アイデアは、リストをリセットし、データポイントの次のセットのためにそれを再利用することです:私はこのような何かをしようとしています。最初のリストは、次のリストは、インデックス3から引き続き、これらのインデックスの最後の3つの要素を格納します

glist[0] 
glist[1] 
glist[2] 

3ポイントを、持っている場合 問題は、何らかの理由で、ある

私は「
glist[0] = 4th elem of new list 
glist[1] = 5th elem of new list 
glist[2] = 6th elem of new list 
glist[3] = 1st elem of new list 
glist[4] = 2nd elem of new list 
glist[5] = 3rd elem of new list 

割り当てられた領域に問題があることを確認してください。しかし、どのようにしてこのdel g_list [:]を達成することができますか?結果は、

glist[0] = 1st elem of new list 
glist[1] = 2nd elem of new list 
glist[2] = 3rd elem of new list 
glist[3] = 4th elem of new list 
glist[4] = 5th elem of new list 
glist[5] = 6th elem of new list 

ループ内から変数を割り当てることはオプションではありません。何か案は?

+0

インデックスにある項目を置くあなたのコードスニペットは、非常にほとんど意味がありません。あなたが実際にやろうとしていることに近いコードを投稿できますか? big_listとvalは未定義で、私は決して使用されません。 –

+0

"ループ内から変数を割り当てることはオプションではありません。" - あなたはなぜこれを言うのかの概要を教えてください。パフォーマンス上の理由であれば、プロファイリングを検討してから早くなることを前提にしておくべきだと思います。 –

+0

例のコードではこれらの効果はありません。実際のコードに置き換える必要があります。 しかし、私はあなたが実際にglistを変更してループしていると思われます。それはそのような影響を与える可能性があります。 –

答えて

4

del glist[:]からglist = []に変更してください。 Pythonで「再利用」や「再割り当て」する必要はありません。ガーベッジコレクターがそれを処理します。

また、両方のループでループ変数として 'i'を使用します。それは遅かれ早かれあなたを混乱させてしまいます。 :)

+0

私はそれを で始まり、それをdel と置き換えましたが、どちらもうまくいきませんでした。 – grobartn

+1

彼は実際のコードを言い換えていると思いますが、いずれにしても間違っているかもしれません+1 –

+0

実際、実際にリストを破棄して再割り当てするほうが、リストを再割り当てするほうが速いのが実際です。 –

1

あなたは、リストをクリアするため正常に動作del glist[:]

glist=[] 
1

を試すことができます。正確なコードを表示する必要があります。下に示すように、記述している動作は起こりません。 del a[:]appendは0

>>> a = [1,2,3] 
>>> del a[:] 
>>> a 
[] 
>>> a.append(4) 
>>> a 
[4] 
関連する問題