2016-05-30 19 views
3

我有以下代碼:試圖理解爲什麼一個嵌套的循環稱爲僅第一次

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: 
      ... 

當我運行蟒蛇2.7此方法,其行爲符合市場預期。 nest for循環每次運行外循環時運行。

當我將相同的代碼加載到在Python 3上運行的Kaggle python腳本引擎時,嵌套循環只運行一次。對於所有其他迭代,它會被跳過。

這裏是如何的方法被調用:

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(...))來代替​​。

相關問題