2016-05-30 3 views
3

と呼ばれる理由私は、次のコードを持って理解しようとすると:私のpython 2.7でこのメソッドを実行すると、予想通りは、ループのネストされたが、初回のみ

def get_preds(train,test,x_ranges,y_ranges): 
    global total_scores 
    global num_scores 
    for x_min, x_max in x_ranges: 
     for y_min, y_max in y_ranges: 
      ... 

、それが動作します。ループのネストは、外側のforループが実行されるたびに実行されます。

Python 3で動作するKaggle pythonスクリプトエンジンにこの同じコードをロードすると、ネストされたループは1回だけ実行されます。その他のすべての反復では、スキップされます。

はここでメソッドが呼び出される方法は次のとおりです。

dataset = pd.read_csv('../input/train.csv',dtype=types,index_col=0) 
split_t=math.floor((0.9)*786239) 

train = dataset[dataset.time < split_t] 
test = dataset[dataset.time >= split_t] 


def gen_ranges(size,step): 
    return zip(np.arange(0,size,step), np.arange(step, size+step, step)); 

x_ranges = gen_ranges(size,x_step) 
y_ranges = gen_ranges(size,y_step) 

preds_test_total = get_preds(train,test,x_ranges,y_ranges) 
+1

どのように関数を呼び出しますか? –

+0

preds_test_total = get_preds(train、test、x_ranges、y_ranges)は、メソッドの外部にあります。 –

+1

どのように関数を呼び出しますか?特に、 'yranges'は両方のインタプリタのリストであり、それはPython 2のリストとPython 3のジェネレータです。 – gboffi

答えて

2

のPython 3では、zip()イテレータを返します。反復子の要素は一度しか反復できません。 Python 2の動作を複製するには、​​の代わりにlist(zip(...))を使用してください。

関連する問題