Unity does some magic behind the scenes, so an object that is destroyed will immediately return true on a null-check. It’s not actually quite null yet (Object.ReferenceEquals(go, null) will still be false, as the go is still in memory), but you usually don’t have to worry about that. Just check for null and you’re good to go.
You can not remove a destroyed GO from the list… it is destroyed. Because it wasn’t removed from the list beforehand, other scripts accessing this list will cause problems. You should remove the GO from the list first and then destroy it with: