Migration Python 3> TypeError: doit être un nombre réel, pas le support de la carte> changer map () en liste (map ())

Environnement d'exploitation


Xeon E5-2620 v4 (8 noyaux) x 2
32GB RAM
CentOS 6.8 (64bit)
openmpi-1.8.x86_64 et ses-devel
mpich.x86_64 3.1-5.el6 et ses-devel
gcc version 4.4.7 (Et gfortran)
NCAR Command Language Version 6.3.0
WRF v3.7.Utilisez 1.
Python 2.6.6 (r266:84292, Aug 18 2016, 15:13:37) 
Python 3.6.0 on virtualenv

Le code ci-dessous fonctionnait bien dans Python 2.

test_numpy_170317.py


#!/usr/bin/env python

import numpy as np

vals = map(float, [3., 1., 4.])
total_val = np.sum(vals)
print('total: %.2f' % total_val)

Lorsque je l'exécute sur Python 3, j'obtiens l'erreur suivante:

Traceback (most recent call last):
  File "test_numpy_170317.py", line 7, in <module>
    print('total: %.2f' % total_val)
TypeError: must be real number, not map

Dans Python 2, map () a renvoyé un objet de liste. Dans Python 3, ce qui est retourné par map () semble être un objet de carte.

Référence http://stackoverflow.com/questions/1303347/getting-a-map-to-return-a-list-in-python-3-x

En enfermant l'objet map dans list (), l'erreur a disparu.

test_numpy_170317.py


#!/usr/bin/env python

import numpy as np

vals = list(map(float, [3., 1., 4.]))
total_val = np.sum(vals)
print('total: %.2f' % total_val)

Recommended Posts

Migration Python 3> TypeError: doit être un nombre réel, pas le support de la carte> changer map () en liste (map ())
N'a pas changé de Python 2 à 3
TypeError: mul (): l'argument 'autre' (position 1) doit être Tensor, pas lister la solution pour l'erreur
Que faire si «TypeError: must be string, not int…» apparaît lors de l'utilisation de strptime
C'était un souvenir douloureux quand on m'a dit TypeError: doit être de type, pas de classe obj en essayant d'hériter avec Python
[python] Remplacez le nom du fichier image par un numéro de série
[Python] Il peut être utile de lister les trames de données