Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

499
Views
¿Cómo convertir una función .reduce de Javascript a Python?

Estoy leyendo una fuente de JavaScript y necesito convertirla a Python.

Aquí está el código, ya que solo soy un principiante, no obtengo la función .reduce() en absoluto

 function bin2dec(num){ return num.split('').reverse().reduce(function(x, y, i){ return (y === '1') ? x + Math.pow(2, i) : x; }, 0); }

Esto es lo que he intentado hasta ahora

 def bin2dec(num): listNum = list(num) listNum = map(int, listNum) x = listNum[-1] listNum.reverse() for i in range (len(listNum)): if listNum[i] == 1: x = x + 2**listNum[i] else: x = x return x

Pero no es correcto.

about 4 years ago · Santiago Gelvez
2 answers
Answer question

0

Equivalencia normal

  • Javascript parseInt(x, 2)
  • pitón int(x, 2)

Usando el mismo método que el código publicado

 from functools import reduce import math def bin2dec(s): return reduce(lambda x, y_i: x + int(math.pow(2, y_i[0])) if y_i[1] == '1' else x, enumerate(reversed(s)), 0)

Prueba

 print(bin2dec('110')) # outut: 6

Explicación

  • reversed(s) para reemplazar Javascript num.split('').reverse()
  • La función de reduce de Python de functools tiene la firma reduce(function, iterable[, initializer])
    • Use la función Python lambda en lugar de la function(x, y, i){... (1er argumento)
    • Javascript reduce proporciona el valor actual y el índice actual y, i
    • Python solo proporciona el valor actual, por lo que usamos enumerar (...) en la matriz de valores para convertir al índice actual, pares de valores actuales (segundo argumento)
    • y_i son tuplas de valor, con y_i[0] = índice y y_i[1] el valor
    • use 0 como inicializador (último argumento en reducir)
  • int para convertir el valor de math.pow de float a entero
  • Python if else expresión en lugar de Javascript ? operador ternario

Código de Python más simple que usar Reducir

 def bin2dec(s): return sum((0, 2**i)[y == '1'] for i, y in enumerate(s[::-1]))
about 4 years ago · Santiago Gelvez Report

0

Simplemente puede usar la función int incorporada:

 int("010010", 2) >>> 18

Dicho esto, encontré un enfoque alternativo bastante interesante usando js2py . Puede alimentarlo con toda la función js como una cadena, lo que le permite usar js de manera efectiva dentro de python:

 import js2py bin2dec = js2py.eval_js(""" function bin2dec(num){ return num.split('').reverse().reduce(function(x, y, i){ return (y === '1') ? x + Math.pow(2, i) : x; }, 0); } """) bin2dec("010010") >>> 18

Instalar con pip install js2py


Cometió muchos errores con su intento, la función de map devuelve un iterator , no una list . En general, solo evite el map y el filter y use una lista de comprensión en su lugar.

También elevaste 2 a la potencia del valor (1 o 0) cuando debería haber sido el índice.

Aquí hay una versión de trabajo de su ejemplo:

 def bin2dec(num): listNum = [int(n) for n in num] total = 0 listNum.reverse() for i, n in enumerate(listNum): if n == 1: total += 2 ** i return total
about 4 years ago · Santiago Gelvez Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!