Круто, да. Лаконично. В функциональном стиле. Но мутабельные итераторы подсирают чуток понимание кода. Вот хаскельный вариант:
countours = map excl . filter ((/=) ["END"]) . groupBy notEND . words
excl (h:t) = (map read t :: [Double], head h == '!')
notEND x y = x /= "END" && y /= "END"
no subject