A basic Python iteration tool is enumerate. With this you can iterate on an array of floats, and still get a sequential integer index.
In [16]: arr = np.zeros(20)
...: x_n=np.arange(0,1,0.05) #[0,1]
...:
...: for i,v in enumerate(x_n):
...: arr[i] = np.sin(2*np.pi*v)
...:
In [17]: arr
Out[17]:
array([ 0.00000000e+00, 3.09016994e-01, 5.87785252e-01, 8.09016994e-01,
9.51056516e-01, 1.00000000e+00, 9.51056516e-01, 8.09016994e-01,
5.87785252e-01, 3.09016994e-01, 1.22464680e-16, -3.09016994e-01,
-5.87785252e-01, -8.09016994e-01, -9.51056516e-01, -1.00000000e+00,
-9.51056516e-01, -8.09016994e-01, -5.87785252e-01, -3.09016994e-01])
An alternative is to iterate with for i in range(len(x_n)):, but enumerate is clearer.
But you don't need to iterate (in python) at all:
In [18]: np.sin(2*np.pi*x_n)
Out[18]:
array([ 0.00000000e+00, 3.09016994e-01, 5.87785252e-01, 8.09016994e-01,
9.51056516e-01, 1.00000000e+00, 9.51056516e-01, 8.09016994e-01,
5.87785252e-01, 3.09016994e-01, 1.22464680e-16, -3.09016994e-01,
-5.87785252e-01, -8.09016994e-01, -9.51056516e-01, -1.00000000e+00,
-9.51056516e-01, -8.09016994e-01, -5.87785252e-01, -3.09016994e-01])