Python 2 --> 3: objet de type " zip " n'a pas de len()
Je suis en suivant un tutoriel sur les réseaux de neuronesUn
C'est en Python 2.7. Je suis en 3.4. C'est la ligne qui me trouble:
if test_data: n_test = len(test_data)
J'obtiens: TypeError: object of type 'zip' has no len()
.
Est-il un moyen de le réécrire pour qu'il fonctionne en 3.4?
- connexes: la Longueur finie générateur
- connexes: Obtenir le nombre d'éléments dans un itérateur en Python
- Si vous avez accès à deux iterables qui ont été zippé, juste calculer la longueur de la fois et de prendre celle qui est la plus petite. La longueur de la fermeture à glissière ne va pas être tout différent.
- Essayez d'utiliser
list(zip(...)
où vous avezzip(...)
- Qui semble avoir fixé, même si je reçois une deuxième erreur en ce qui concerne
mini_batches = [training_data[k:k+mini_batch_size] for k in range(0, n, mini_batch_size)]
l'erreur de litFile "/home/lukasz/Documents/Machine Learning/network.py", line 66, in <listcomp> for k in range(0, n, mini_batch_size)] TypeError: 'zip' object is not subscriptable
w - même problème, le programme est en train d'essayer de faire quelque chose comme
zip(...)[i]
. Le mieux serait de définir une nouvelle variablenew_var = list(zip(...))
et le remplacement dezip(...)
avecnew_var
.
Vous devez vous connecter pour publier un commentaire.
Si vous savez que l'itérateur est finie:
Ou si vous savez que
test_data
est toujours des petits et un profileur dit que le code est le goulot d'étranglement dans votre application puis voici le code qui pourrait être plus efficace pour les petitesn_test
:Malheureusement,
opérateur.length_hint()
(Python 3.4+) renvoie zérozip()
objet. Voir PEP 0424-UNE méthode pour exposer une longueur de soupçon.test_data = list(test_data)
avant laif
vérifier, sinonif test_data
sera toujours vrai, même pour un videzip
. Pourrait également être intéressant de souligner quesum(...)
consomment lezip
test_data
estNone
?if
vérifier ne serait pas nécessaire, si c'était juste une liste vide (alorsn_test
voudrais juste être 0). Encore, peut-être intéressant de souligner, juste au cas où.Un peu tard pour répondre, mais au cas où quelqu'un d'autre tombe sur ça: pour que même réseau neuronal exemple tutoriel, il s'est avéré que j'avais à envelopper les 3 zip appels dans le mnist_loader avec une liste(zip(...)) construire:
Et puis il a travaillé.
load_data_wrapper()
.De la Force de la
zip()
à évaluer.Quelques Infos
C'est parce que dans le Python 3.x,
zip
retourne un objet de générateur. Cet objet n'est pas une liste (c'est mieux), mais il se comporte comme un. Vous pouvez essayer de l'itération à travers elle comme ceci:La Réponse Rapide
Merci de nous montrer le code entourant l'endroit où l'erreur s'est passé.
Mais je pense que je peux encore vous donner un rapide (et pas forcément la bonne solution.
tourner cette
dans cette:
Dans mnist_loader envelopper votre zip résultats dans
list()
construit comme ci-dessous