Python3 zip()函数的坑

最近在学习谷歌机器学习框架TensorFlow

Python3 zip()函数的坑

遇到一个特征工程的处理函数

调用第一次的时候打印结果是正确的,就是这句

selected_training_examples = select_and_transform_features(training_examples)

而执行这句

selected_validation_examples = select_and_transform_features(validation_examples)

死活不会执行print(r)

最后查了一下发现问题出在这一句:

LATITUDE_RANGES = zip(range(32, 44), range(33, 45))

python2的zip()函数返回的是一个列表,也就是说

LATITUDE_RANGES = zip(range(32, 44), range(33, 45))返回的是

[(32, 33), (33, 34), (34, 35), (35, 36), (36, 37), (37, 38), (38, 39), (39, 40), (40, 41), (41, 42), (42, 43), (43, 44)]

而我使用的是python3,zip函数返回的是一个元组对象

zip在python3中,处于优化内存的考虑,只能访问一次

所以就出现了这个函数调用第2次不会去访问LATITUDE_RANGES的现象。

解决方法:

把LATITUDE_RANGES = zip(range(32, 44), range(33, 45))换成

LATITUDE_RANGES = [(32, 33), (33, 34), (34, 35), (35, 36), (36, 37), (37, 38), (38, 39), (39, 40), (40, 41), (41, 42), (42, 43), (43, 44)]即可