quitar - lista de funciones de python
Manera eficiente de convertir cadenas de función de división a ints en Python (4)
Tengo una cadena de datos con el siguiente formato: xpos-ypos-zoom (es decir, 8743-12083-15) que quiero dividir y almacenar en las variables xpos, ypos y zoom. Ya que necesito hacer algunos cálculos con estos números, me gustaría convertirlos a números enteros desde el principio. Actualmente, la forma en que lo hago es con el siguiente código:
file = ''8743-12083-15''
xval, yval, zoom = file.split("-")
xval = int(xval)
yval = int(yval)
Me parece que debería haber una manera más eficiente de hacer esto. ¿Algunas ideas?
¿Eficiente como en menos líneas de código?
(xval,yval,zval) = [int(s) for s in file.split(''-'')]
Mi sugerencia original con una lista de comprensión.
test = ''8743-12083-15''
lst_int = [int(x) for x in test.split("-")]
EDITAR:
En cuanto a lo que es más eficiente (cpu-cyclewise) es algo que siempre debe ser probado. Algunas pruebas rápidas en mi instalación de Python 2.6 indican que el mapa es probablemente el candidato más eficiente aquí (compilar una lista de enteros a partir de una cadena dividida en valores). Tenga en cuenta que la diferencia es tan pequeña que esto realmente no importa hasta que lo hace millones de veces (y es un cuello de botella comprobado) ...
def v1():
return [int(x) for x in ''8743-12083-15''.split(''-'')]
def v2():
return map(int, ''8743-12083-15''.split(''-''))
import timeit
print "v1", timeit.Timer(''v1()'', ''from __main__ import v1'').timeit(500000)
print "v2", timeit.Timer(''v2()'', ''from __main__ import v2'').timeit(500000)
> output v1 3.73336911201
> output v2 3.44717001915
Puede map
la función int
en cada subcadena, o usar una lista de comprensión :
>>> file = ''8743-12083-15''
>>> list(map(int, file.split(''-'')))
[8743, 12083, 15]
>>> [int(d) for d in file.split(''-'')]
[8743, 12083, 15]
En lo anterior, no se requiere la llamada a la list
, a menos que se trabaje con Python 3.x. (En Python 2.x, el map
devuelve una lista, en Python 3.x devuelve un generador.)
También es posible la asignación directa a las tres variables (en este caso, una expresión generadora en lugar de una comprensión de lista servirá):
>>> xval, yval, zval = (int(d) for d in file.split(''-''))
>>> xval, yval, zval
(8743, 12083, 15)
nota: es posible que desee elegir un nombre diferente para el file
ya que esto difumina la construcción
esto funciona en Python 2 y 3
xval,yval,zval = map(int,file.split(''-''))