For me, it's pretty much the opposite. With the exclamation mark, I'll see the inversion, then I'll read the actual condition and try to make sense of it, and then I'll remember that this thing was supposed to be inverted. Or I won't remember, that's unfortunately also a possibility.
Might just be what we're used to, though. I have been working in a codebase with mostly .not() for the past year.
We could have used the tilde, which has been used in formal logic & maths for negation in very many contexts for a long time.
It's used instead in C and many C-like languages for the far less useful bitwise negation. Of course, we could have had it work in the same way as bitwise vs logical and & or, by dialling up the symbol. Which would have massively improved its visibility compared to the bang.
But for some reason, no. They chose the bang instead.
Oh, I know where it came from. That's also why we have all kinds of maths operators in the syntax of virtually any programming language. Because back when we didn't yet know where this programming thing was going, we just threw in the conventions of maths and theoretical logic.
What I'm saying is that we have our own conventions now, i.e. objects and methods, so I think, it's worth reconsidering whether we still want to have these old conventions that are special cases in the syntax.
It's ok for symbols to have different meanings in different contexts. If someone is new to the context, they should research or ask about it. People that are familiar should provide the mutual understanding, provided they have the will and ability to educate.
But what I really don't like about it, is that it's less clear to what it applies. For example:
not list.isEmpty() and x > 3
Is that not (a and b) or (not a) and b?
Obviously, you can define precedence rules, like there also is for !, but that's again just additional things to learn.
I'm definitely not generally opposed to special characters. I do also hate significant whitespace, because I find that less readable than braces.
In a lot of computer contexts (not coding, in my case) <> functions as not equal, which I think is pretty elegant since the meaning is derived from already existing mathematical symbols.