The idiomatic way to solve a problem in Racket is to develop new syntax (and evaluation orders) which are suited to the problem.
In fact, Racket has pythonic list comprehension syntax too:
(for/list ([x '(2 4 8)]) (sqr x))
It also has lazy evaluation langs, static typecheck pre-eval step langs, DFA compilers, OOP...Basically the floodgates are open, even if the river is still a bit barren. Every confusing language feature in existence can be added to Racket. The only saving grace is that anyone, including you, can replace it with less confusing syntax / evaluation orders if they so desire.
I wrote a Macro which adds identifiers to your program based on a SQLite database's column names. [0] If the database isn't found your program does not compile. How is that for confusing alternative evaluation order? If that's your nightmare, my point is made.
[0]: http://tech.perpetua.io/2022/01/generating-sqlite-bindings-w...