The public suffix doesn't list .ac.uk or .go.th (because it only lists somewhere the general public can register) so it's not especially useful for working out if something is a toppish-level domain.
The list doesn't only specify which domains users can register, but it is also used by browsers to determine what constitutes "same origin". This is related to security so even registrars which don't allow the general public to register these domains, it is very much in their interest to add an entry to the public suffix list.
For example, the maintainers of .ac.uk should very much care about the owner of "foo.ac.uk" not being able to set a cookie for "bar.ac.uk", which is partly what the PLS is used for!
No idea for how you’d generate an exhaustive list, although one-off you could walk up a given URL’s host looking for A-records? You’d want some fail-safes there presumably. Perhaps you could do this with the common crawl db