For instance, what does = mean between domain and email.split ? Who is equal to who? That question is a question that students sometimes have. You have to explain that Time is implicit in the code, and that an equal sign works by making the thing on the left equal to what the thing on the right was just before this line. So now there's a concept of Time and that's how things start to get very complicated, because it is implicit in your code.
Then, what does ".append" mean? I mean, you call append, but now you don't assign the result to any variable? And what would it mean if you said domains = domains.append(domain), then we really need to have a talk about the hidden Time.
So it only seems simple because it's familiar to you; so in fact I believe it's not simple at all.
But this I believe it's simple, and my fishing boat engine above would've benefited from this:
https://www.fpcomplete.com/tutorial-preview/4217/4k7kq6jGUE
If you look at that code (you can also click play to run it) and then look at the explanation again, could you please tell me what doesn't seem simple?
Edit: let's not forget your Python example uses a map, disguised as a for loop. That for is a keyword, but backstage it's just map where email is the element, emails is the list, and everything you write inside that scope is the function that gets passed the element each time (except in your case the function (i.e. the loop body) can also see the whole list, which is prone to bugs).