Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Python 2-->;3:类型为'的对象;拉链';没有len()_Python 2.7_Python 3.x - Fatal编程技术网

Python 2.7 Python 2-->;3:类型为'的对象;拉链';没有len()

Python 2.7 Python 2-->;3:类型为'的对象;拉链';没有len(),python-2.7,python-3.x,Python 2.7,Python 3.x,我正在学习神经网络教程 它在Python2.7中。我用的是3.4。这是困扰我的一句话: 如果测试数据:n\u test=len(测试数据) 我得到:TypeError:zip类型的对象没有len() 有没有办法重写它,使其在3.4中工作?强制zip()进行计算 foo = list(zip(...)) 如果您知道迭代器是有限的: #NOTE: `sum()` consumes the iterator n_test = sum(1 for _ in test_data) # find len(

我正在学习神经网络教程

它在Python2.7中。我用的是3.4。这是困扰我的一句话:

如果测试数据:n\u test=len(测试数据)

我得到:
TypeError:zip类型的对象没有len()

有没有办法重写它,使其在3.4中工作?

强制
zip()
进行计算

foo = list(zip(...))

如果您知道迭代器是有限的:

#NOTE: `sum()` consumes the iterator
n_test = sum(1 for _ in test_data) # find len(iterator)
或者,如果您知道
test\u数据总是很小,并且探查器说代码是应用程序中的瓶颈,那么下面的代码对于小型
n\u测试来说可能更有效:

test_data = list(test_data)
n_test = len(test_data)

不幸的是,(Python3.4+)对于
zip()
对象返回零。请参阅。

现在回答有点晚,但万一其他人偶然发现:对于同一个神经网络示例教程,我不得不在mnist_加载器中用一个列表(zip(…)结构包装3个zip调用:

training_data = list(zip(training_inputs, training_results))
(...)
validation_data = list(zip(validation_inputs, va_d[1]))
(...)
test_data = list(zip(test_inputs, te_d[1]))
然后它成功了。

一些信息 这是因为在Python3.x中,
zip
返回一个生成器对象。此对象不是列表(更好),但其行为类似于列表。您可以尝试像这样对其进行迭代:

for i in zip([1,2,3,4], ['a','b','c','d']):
    print i
快速回答 请向我们展示错误发生的代码。 但我认为我仍然可以给你一个快速(但不一定是好的)解决方案

转这个

for i in reversed(range(1, len(x))):
为此:

for i in reversed(range(1, len(list(x))):

在mnist_loader中,将您的zip结果包装在
list()
结构中,如下所示

def load_data_wrapper():    
    tr_d, va_d, te_d = load_data()
    training_inputs = [np.reshape(x, (784,1)) for x in tr_d[0]]
    training_results = [vectorized_result(y) for y in tr_d[1]]
    training_data = list(zip(training_inputs, training_results))
    validation_inputs = [np.reshape(x,(784, 1))for x in va_d[0]]
    validation_data = list(zip(validation_inputs, va_d[1]))
    test_inputs = [np.reshape(x, (784, 1)) for x in te_d[0]]
    test_data = list(zip(test_inputs, te_d[1]))
    return(training_data, validation_data, test_data)

相关的:相关的:如果你可以访问两个已经压缩的iterables,只需计算两者的长度,取较小的一个。zip的长度不会与此有任何不同。请尝试使用
list(zip(…)
当您遇到
zip(…)
同样的问题时,程序正在尝试执行类似
zip(…)[i]
的操作。最好是定义一个新变量
new\u var=list(zip(…)
并替换
zip(…)
使用
new\u var
。您应该在
if
检查之前执行
test\u data=list(test\u data)
,否则
if test\u data
将始终为真,即使对于空的
zip
。也可能值得指出的是
sum(…)
将使用
zip
我明白你的意思……事实上,如果它只是一个空列表,则不需要检查
if
(那么
n\u test
将仅为0)。尽管如此,还是值得一提,以防万一。现在仔细研究你的建议,非常感谢。这是其他人的代码,我承认这扩展了我的能力。干杯!对性能更好的是,如果你能继续使用生成器,这样你就不会在内存中构建庞大的列表。这可能需要更彻底的重构,这就是仅问题中的代码片段是不可能的。仅供参考:从晚到晚合并,但欢迎更晚到达的人,t这三个都在
load\u data\u wrapper()
中。他们正在谈论本教程:这看起来是更好的选择,因为它解决了使用zip()时出现的问题