Python3 zip()函数的坑
最近在学习谷歌机器学习框架TensorFlow
遇到一个特征工程的处理函数
调用第一次的时候打印结果是正确的,就是这句
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)]即可