# List comprehension is much slower in jython

**URL:** <https://forum.inductiveautomation.com/t/list-comprehension-is-much-slower-in-jython/87559>\
**Category:** Ignition\
**Created:** [March 19, 2024, 3:04pm UTC](https://forum.inductiveautomation.com/t/list-comprehension-is-much-slower-in-jython/87559 "2024-03-19T15:04:12Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![mcarritt1](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mcarritt1/32/4262_2.png) [@mcarritt1](https://forum.inductiveautomation.com/u/mcarritt1)\
**Post date:** [March 19, 2024, 3:04pm UTC](https://forum.inductiveautomation.com/t/list-comprehension-is-much-slower-in-jython/87559/1 "2024-03-19T15:04:12Z")

</div>

just thought I would share with the community what I learned today; that list comprehension in Jython 2.7 is not faster. If youre like me, you've probably heard a lot that list comprehension is faster and that you should use it (but if you dig deeper, in using actual python 3.x , its also not always faster, only in simple scenarios it helps).

What I found is that in jython its much slower, even for simple operations.

using a for loop in this test showed its about 2x as fast as list comprehension

 ![image](https://us1.discourse-cdn.com/inductiveautomation/original/3X/2/0/2017e2bdecb8bf6818d746ef1b50983b1a5137d9.png)

here is the code if you want to try yourself:

```auto
import timeit

MILLION_NUMBERS = list(range(1000000))

def list_comprehension(MILLION_NUMBERS):
    return [number for number in MILLION_NUMBERS if not number % 2]

def for_loop(MILLION_NUMBERS):
    output = []
    for element in MILLION_NUMBERS:
        if not element % 2:
            output.append(element)
    return output

def list_comprehension_simple(MILLION_NUMBERS):
    return [number + 1 for number in MILLION_NUMBERS]

def for_loop_simple(MILLION_NUMBERS):
    output = []
    for element in MILLION_NUMBERS:
        output.append(element +1 )
    return output

t = timeit.Timer(lambda: list_comprehension(MILLION_NUMBERS))
print("total time for list_comprehension: ", (t.timeit(100)))

t = timeit.Timer(lambda: for_loop(MILLION_NUMBERS))
print("total time for for_loop: ", (t.timeit(100)))

print("simple:")

t = timeit.Timer(lambda: list_comprehension_simple(MILLION_NUMBERS))
print("total time for list_comprehension_simple: ", (t.timeit(100)))

t = timeit.Timer(lambda: for_loop_simple(MILLION_NUMBERS))
print("total time for for_loop_simple: ", (t.timeit(100)))

```

---

<div class="post-metadata">

**Author:** ![mcarritt1](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/mcarritt1/32/4262_2.png) [@mcarritt1](https://forum.inductiveautomation.com/u/mcarritt1)\
**Post date:** [March 19, 2024, 3:07pm UTC](https://forum.inductiveautomation.com/t/list-comprehension-is-much-slower-in-jython/87559/2 "2024-03-19T15:07:41Z")

</div>

running the same in python 3.12 , its really about the same

 ![Screenshot 2024-03-19 at 3.33.01 PM](https://us1.discourse-cdn.com/inductiveautomation/original/3X/c/8/c8dca736f0a4fdbe8d127057bc694d1b18081a0f.png)

in 3.9, its a bit faster but not much

 ![Screenshot 2024-03-19 at 3.32.09 PM](https://us1.discourse-cdn.com/inductiveautomation/original/3X/4/5/4556bedb2874d042f904279bf247bda137247dc0.png)

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [March 19, 2024, 3:12pm UTC](https://forum.inductiveautomation.com/t/list-comprehension-is-much-slower-in-jython/87559/3 "2024-03-19T15:12:19Z")

</div>

Seems to be Jython specific, comprehensions are faster in Python 2.7 as well.

Python 2.7:

```auto
kevin@DV-55J5DY3-LT:~$ python2.7 comptest.py
('total time for list_comprehension: ', 1.994236946105957)
('total time for for_loop: ', 2.7266299724578857)
simple:
('total time for list_comprehension_simple: ', 1.7277748584747314)
('total time for for_loop_simple: ', 3.0167899131774902)

```

Jython 2.7:

```auto
kevin@DV-55J5DY3-LT:~$ jython comptest.py
('total time for list_comprehension: ', 9.468000173568726)
('total time for for_loop: ', 4.379000186920166)
simple:
('total time for list_comprehension_simple: ', 10.111999988555908)
('total time for for_loop_simple: ', 5.130000114440918)

```

---

<div class="post-metadata">

**Author:** ![pascal.fragnoud](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pascal.fragnoud/32/24728_2.png) [@pascal.fragnoud](https://forum.inductiveautomation.com/u/pascal.fragnoud)\
**Post date:** [March 19, 2024, 3:26pm UTC](https://forum.inductiveautomation.com/t/list-comprehension-is-much-slower-in-jython/87559/4 "2024-03-19T15:26:15Z")

</div>

That's it, you'll have to rewrite ignition in C.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [March 19, 2024, 3:38pm UTC](https://forum.inductiveautomation.com/t/list-comprehension-is-much-slower-in-jython/87559/5 "2024-03-19T15:38:09Z")

</div>

> [@pascal.fragnoud](#):
>
> rewrite ignition in C.

[Straight to jail](https://www.nsa.gov/Press-Room/Press-Releases-Statements/Press-Release-View/Article/3608324/us-and-international-partners-issue-recommendations-to-secure-software-products/#:~:text=Recommended%20memory%20safe%20programming%20languages,Python%2C%20Rust%2C%20and%20Swift.) 🙃

---

<div class="post-metadata">

**Author:** ![Felipe\_CRM](https://avatars.discourse-cdn.com/v4/letter/f/dfb087/32.png) [@Felipe\_CRM](https://forum.inductiveautomation.com/u/Felipe_CRM)\
**Post date:** [March 19, 2024, 3:49pm UTC](https://forum.inductiveautomation.com/t/list-comprehension-is-much-slower-in-jython/87559/6 "2024-03-19T15:49:25Z")

</div>

I'm sure if you start working on rewriting in Rust you'll have something ready by Ignition 12.1

---

<div class="post-metadata">

**Author:** ![pascal.fragnoud](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pascal.fragnoud/32/24728_2.png) [@pascal.fragnoud](https://forum.inductiveautomation.com/u/pascal.fragnoud)\
**Post date:** [March 19, 2024, 4:03pm UTC](https://forum.inductiveautomation.com/t/list-comprehension-is-much-slower-in-jython/87559/7 "2024-03-19T16:03:42Z")

</div>

Is there a rusthon ?

---

<div class="post-metadata">

**Author:** ![Felipe\_CRM](https://avatars.discourse-cdn.com/v4/letter/f/dfb087/32.png) [@Felipe\_CRM](https://forum.inductiveautomation.com/u/Felipe_CRM)\
**Post date:** [March 19, 2024, 4:32pm UTC](https://forum.inductiveautomation.com/t/list-comprehension-is-much-slower-in-jython/87559/8 "2024-03-19T16:32:31Z")

</div>

There is, currently v0.3.0:

> **[GitHub - RustPython/RustPython: A Python Interpreter written in Rust](https://github.com/RustPython/RustPython)**
>
> A Python Interpreter written in Rust. Contribute to RustPython/RustPython development by creating an account on GitHub.

Unfortunately, it's not all that performant in its current state.
