Cuando llamo a este método patternFinder () recibí un error como este

def patternFinder():
    avgaLine=((bid+ask)/2)
    x=len(avgaLine)-30
    y=11

    while y<x:
        outcomeRange=avgaLine[y+20:y+30]
        currentPoint=avgaLine[y]

        print reduce((lambda x,y:x+y,outcomeRange)/len(outcomeRange))
        print (currentPoint)
        print ('_________')

        time.sleep(5555)

Recibo este error:

Archivo <ipython-input-66-a32566f8689e>, línea 21
print reduce ((lambda x, y: x + y, resultRange) / len (resultRange))
Error de sintaxis: sintaxis invalida

enter image description here

-1
Ragulan 10 sep. 2018 a las 13:28

3 respuestas

La mejor respuesta

Esa no es la forma correcta de usar reduce (la división debe hacerse después de la reducción), y además ni siquiera necesita usar reduce aquí. Si desea calcular un promedio, intente esto en su lugar:

print( sum(outcomeRange) / len(outcomeRange) )

Por cierto, ten cuidado con la división de enteros. Asegúrese de que outcomeRange contenga al menos un valor decimal, o que haya importado la función de división actual:

from __future__ import division
2
Óscar López 10 sep. 2018 a las 10:37

reduce toma dos argumentos separados, función e iterable. Entonces, tu línea debería ser

reduce(lambda x,y:x+y,  outcomeRange/len(outcomeRange))

Sin embargo, también asegúrese de que su outcomeRange sea una matriz numpy, de lo contrario obtendrá otro error de sintaxis por tratar de dividirlo por un número. De lo contrario, convierta la división a [x/len(outcomeRange) for x in outcomeRange]

En ese caso, sería mejor dividir por la longitud después de que se realiza la suma, por lo que podría escribir

reduce(lambda x, y: x+y, outcomeRange) / len(outcomeRange)
1
blue_note 10 sep. 2018 a las 10:41

Lo más probable es que esté usando Python 3+, lo que significa que la sintaxis de su declaración print es incorrecta. Tiene que estar entre paréntesis:

print(reduce((lambda x,y:x+y,outcomeRange)/len(outcomeRange)))

Lo has hecho correctamente en las otras 2 print declaraciones, supongo que te lo has perdido aquí.

0
Fanatique 10 sep. 2018 a las 10:50