1

スクリプト言語のpythonを学んでいます。私はJavaをかなり知っています。Java から Python に 1 ビットのコードを翻訳しようとしています。しかし、それらは不規則に動作します (または、私の理解が完全に間違っている可能性があります)。Java に次のコードがあり、要素を ArrayList に無期限に追加しています。したがって、これによりメモリ不足エラーが発生します。これは私が期待するものです:

import java.util.*;
public class Testing{
public static void main(String[] args){
        ArrayList<Integer> list = new ArrayList<Integer>();
        list.add(5);
        list.add(4);
        for (int i=0;i<list.size();i++){
            list.add(5);
        }
}
}

Pythonで翻訳された同じコード:

lst = []
lst.append(5)
lst.append(4)
for i in range(len(lst)):
    lst.append(5)
print lst

ここで私は出力を取得します:[5, 4, 5, 5]

for私が見たところ、リストはPythonのループへの参照として渡されていませんか?

ここでも同様に、

>>> l=[1,2,3]
>>> for i in l[:]:
...    l.append(4)
...    print l
... 
[1, 2, 3, 4]
[1, 2, 3, 4, 4]
[1, 2, 3, 4, 4, 4]

ループ内の各反復でfor、リストのサイズを増やしているので、反復は永遠に正しいはずですか?

4

4 に答える 4

6

range(len(lst))範囲を1回作成し、それを反復しますが、Javaではlist.size()反復ごとに評価されます

于 2013-08-27T17:54:47.020 に答える