On 16/09/21 4:23 am, Mostowski Collapse wrote:
I really wonder why my Python implementation
is a factor 40 slower than my JavaScript implementation.

There are Javascript implementations around nowadays that are
blazingly fast. Partly that's because a lot of effort has been
put into them, but it's also because Javascript is a different
language. There are many dynamic aspects to Python that make
fast implementations difficult.

I use in Python:

   temp = [NotImplemented] * code[pos]
   pos += 1

is the the idiom [_] * _ slow?

No, on the contrary it's probably the fastest way to do it
in Python. You could improve it a bit by precomputing
[NotImplemented]:

# once at the module level
NotImplementedList = [NotImplemented]

# whenever you want a new list
temp = NotImplementedList * code[pos]

That's probably at least as fast as built-in function for
creating lists would be.

does it really first create an
array of size 1 and then enlarge it?

It does:

>>> def f(code, pos):
...  return [NotImplemented] * code[pos]
...
>>> from dis import dis
>>> dis(f)
  2           0 LOAD_GLOBAL              0 (NotImplemented)
              2 BUILD_LIST               1
              4 LOAD_FAST                0 (code)
              6 LOAD_FAST                1 (pos)
              8 BINARY_SUBSCR
             10 BINARY_MULTIPLY
             12 RETURN_VALUE

BTW, the Python terminology is "list", not "array".
(There *is* something in the stdlib called an array, but
it's rarely used or needed.)

--
Greg

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to