The reason you are having to use i[0] is because get() is a generator that returns a list of size 1 every time it is called. So your code i[0] for i in get() is the same as i[0] for i in ([0],[0],[0]). The reason your code works is that i[0] gets the first element off the returned element which is itself the list [0].
What I gather from your question is that you want to have i for i in [0,0,0]. As mentioned in other answers this can be achieved by changing you generator to yield the int 0 instead of the list [0]. You can see the result of the generator in the following example code:
>>> for i in get(): ... print("i={} and i[0]={}".format(i, i[0])) ... i=[0] and i[0]=0 i=[0] and i[0]=0 i=[0] and i[0]=0
As you can see, your generator returns a [0] every iteration and that is the reason you have to use i[0] to get the first element of each list.
Also, since r is just the results of the generator, you can simplify by just doing the following:
>>> def gen(): ... for i in range(3): ... yield 0 ... >>> r = list(gen()) >>> r [0, 0, 0]